Рисование нескольких экземпляров одного и того же прямоугольника вместо его перемещения

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 остается даже обновленной. Как я мог в конечном итоге это исправить? Спасибо!

0

Решение

Я предполагаю, что вы забыли стереть Поверхность Понга:

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 с множественными поверхностями, вспыхивающими друг на друге и затем на поверхности экрана, вы можете прочитать небольшой исходный код: Рок Доджер CE который является только одним файлом.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]