绘制同一矩形的多个实例,而不是移动它
Drawing multiple instances of the same rect instead of moving it
class Pong {
public:
Pong(int speed) {
gSpeed = speed;
gPongBG = SDL_LoadBMP("pongBG.bmp");
gPongBGSurf = gPongBG;
gPongRect.w = 800;
gPongRect.h = 460;
gPongRect.x = 700;
gPongRect.y = 220;
gPongPlayer = SDL_LoadBMP("pongPlayer.bmp");
gPongPlayerRect.h = 50;
gPongPlayerRect.w = 10;
gPongPlayerRect.x = 50;
gPongPlayerRect.y = 0;
}
~Pong() {
}
void drawPong() {
gPongBGSurf = gPongBG;
SDL_BlitSurface(gPongBGSurf, NULL, gScreenSurface, &gPongRect);
SDL_BlitSurface(gPongPlayer, NULL, gPongBGSurf, &gPongPlayerRect);
}
void movePlayer() {
gPongPlayerRect.y++;
}
下面的代码使gPongPlayerRect制作自己的多个副本,而不是按照我的计划移动它。在代码的后面,我更新了名为 gWindow 的主窗口,主窗口的表面是 wScreenSurface。如果我将播放器直接放在窗口表面上,它会移动,所以我想问题是旧的 gPongBGSurf 表面即使在更新后也会保持。我最终如何解决这个问题?谢谢!
我的猜测是你忘了擦除Pong Surface:
Uint32 black= SDL_MapRGBA(gPongBGSurf->format,0,0,0,255);
SDL_FillRect(gPongBGSurf, NULL, black);
SDL_BlitSurface(gPongPlayer, NULL, gPongBGSurf, &gPongPlayerRect);
SDL_BlitSurface(gPongBGSurf, NULL, gScreenSurface, &gPongRect);
有关 SDL2 游戏的完整示例,其中多个表面相互重叠,然后到屏幕表面上,您可以阅读 Rock Dodger CE 的小源代码,它只是一个文件。
相关文章:
- 从C++实例化QML
- 在全局变量中保存类的实例以重新创建类(创建"backup")
- OpenGL - 在抛出"__gnu_cxx::recursive_init_error"实例后终止调用?
- 如何在c++中为模板函数实例创建快捷方式
- 在C++中,是否可以基于给定的标识符创建基类的新实例,反之亦然
- 将对象移动到std::shared_ptr
- 何时在引用或唯一指针上使用移动语义
- 设计一个只能由特定类实例化的类(如果可能的话,通过make_unique)
- 如何创建一个空的全局类并在启动时实例化它
- 无法创建抽象类的实例
- 如何从具有移动语义的类对象中生成共享指针
- 多个文件的内存分配错误"在抛出 'std :: bad_alloc' what (): std :: bad_alloc 的实例后终止调用" [C++]
- 在两个类中共享相同的函数调用,并在不需要时避免空实例化
- 将shared_ptr移动到<StructA>shared_ptr<变体<结构A、结构 B>>
- 将 OpenGL 实例化图形与移动对象一起使用
- 将类实例移动到类成员后,无法初始化它
- 绘制同一矩形的多个实例,而不是移动它
- 是否可以返回不可移动、不可复制类型的实例
- C++中函数返回的值是右值吗?无法使用复制/移动构造函数初始化实例
- 关于移动/复制c++对象实例