0

スペースをクリックしたときに弾丸が移動するようにします。最初に、スペースが押されると弾丸の画像がブリットされ、同時にタイマーが開始され、5000 ミリ秒に達すると、画像の x 値が変化するはずです。これは私のコードです:

SDL_Rect bulletRect;
bulletRect.x = dstX+31;  //dstX/Y is the source destination of another image where the bullet should be drawn
bulletRect.y = dstY+10.5;
SDL_Surface *bullet = IMG_Load(bullet.png");


if (drawBullet) //bool set to true in the space key event.
    {            
        SDL_BlitSurface(bullet, NULL, screen, &bulletRect);

        //timer
        my_timer.start(); //starts the timer

        if (SDL_GetTicks() == 5000) //if 5 sec 
        {
            bulletRect.x += 10;
        }
    }

画像はブリットされただけですが、5 秒後には何も起こりません。なにが問題ですか?

4

2 に答える 2

0

あなたの条件文

if (SDL_GetTicks() == 5000) //if 5 sec 
{
    bulletRect.x += 10;
}

ステートメントの中にあります

if (drawBullet) //bool set to true in the space key event

これは、スペースバーが押されたときにタイマーを一度だけチェックすることを意味します。これを if(drawBullet) の外に移動します

于 2013-06-11T21:20:22.397 に答える
0

SDL_GetTicks() >= 5000をチェックする代わりに を持っている必要があり==5000ます。そうしないと、純粋な運で 5000 をヒットした場合にのみ条件に入ります。

SDL のドキュメントから、SDL_GetTicks 関数: SDL ライブラリの初期化からのミリ秒数を返します。プログラムが 49.7 日以上実行されている場合、この値は循環します。

そのため、最後に移動してから 5 秒経過していることを確認している場合 (ここで他に何をしようとしているのかわかりません)、現在のティック数を保存し、それを使用して次のループ中に比較します (以前と現在の差は > 5000 です)

于 2013-06-11T20:51:10.230 に答える