1

動かしたいイメージがあります。私の問題は、画像が実際には動いていないことです。画像が複製されただけで、古い位置にまだ画像が含まれている間に新しい画像が新しい場所に読み込まれます。

void draw_surface(int srcX, int srcY, int dstX, int dstY, int width, int height, SDL_Surface *source, SDL_Surface *destination)
{
    SDL_Rect src; 
    src.x = srcX;
    src.y = srcY;
    src.w = width;
    src.h = height;

    SDL_Rect dst;
    dst.x = dstX;
    dst.y = dstY;
    dst.w = width;
    dst.h = height;

    SDL_BlitSurface(source, &src, destination, &dst);
}

メイン関数で:

while (gameRunning)
{
    if (SDL_PollEvent(&event))
    {
        if (event.type == SDL_QUIT)
        {
            gameRunning = false;
        }
        if (event.type == SDL_KEYDOWN)
        {
            if (event.key.keysym.sym == SDLK_DOWN)
            {
                dstY += 10; //new position
            }
        }

        //apply
        apply_surface(0, 10, background, screen);
        draw_surface(srcX, srcY, dstX, dstY, width, heigth, background, screen);

    }


    //update screen
    SDL_Flip(screen);

}

このコードの何が問題になっていますか?

4

1 に答える 1

1
  1. ループを使用しwhileてイベントをポーリングする必要があります
  2. 描画をイベント ループ ブロックの外に移動することをお勧めします
  3. 描画する前に画面をクリアする必要があります。そうしないと、古いバック バッファー データが画面に残ります。
Uint32 black = SDL_MapRGB(screen->format, 0, 0, 0);

while (gameRunning) {
    while (SDL_PollEvent(&event)) {
        if (event.type == SDL_QUIT) {
            gameRunning = false;
        }
        if (event.type == SDL_KEYDOWN) {
            if (event.key.keysym.sym == SDLK_DOWN) {
                dstY += 10; //new position
            }
        }
    }
    // Clear screen
    SDL_FillRect(screen, NULL, black);

    //apply
    apply_surface(0, 10, background, screen);
    draw_surface(srcX, srcY, dstX, dstY, width, heigth, background, screen);

    //update screen
    SDL_Flip(screen);
}
于 2013-06-09T16:06:21.660 に答える