簡體   English   中英

繪制同一矩形的多個實例,而不是移動它

[英]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的小源代碼,它只是一個文件。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM