2011-01-05 20 views
0

私はこの上に私の髪をリッピングしています。 SFMLやSDLでスプライトをどのように動かすかを見つけることができません。両方の図書館で見たチュートリアルではこれについて何も書かれていません。だから私はそれがライブラリのものよりもC++のものだと考えています。スプライト移動

私は不思議に思っていました。どのようにスプライトを動かすのですか?

(私は移動を言うとき、私は設定速度でウィンドウ間でのスプライト「グライド」を持っている意味)

答えて

1

あなたが毎秒一定回数呼び出されるループを必要とし、その後は、xを更新、各フレームのスプライトのy値。 SFMLについては

あなたはこれを行うにはsprite.move

while (App.IsOpened()) 
{ 
    // Process events 
    sf::Event Event; 
    while (App.GetEvent(Event)) 
    { 
     if (Event.Type == sf::Event::Closed) 
      App.Close(); 
    } 

    // Get elapsed time 
    float ElapsedTime = App.GetFrameTime(); 

    // Move the sprite 
    if (App.GetInput().IsKeyDown(sf::Key::Left)) Sprite.Move(-100 * ElapsedTime, 0); 
    if (App.GetInput().IsKeyDown(sf::Key::Right)) Sprite.Move(100 * ElapsedTime, 0); 
    if (App.GetInput().IsKeyDown(sf::Key::Up)) Sprite.Move(0, -100 * ElapsedTime); 
    if (App.GetInput().IsKeyDown(sf::Key::Down)) Sprite.Move(0, 100 * ElapsedTime); 
} 
+0

ありがとうございました! – Lemmons

0

私のお気に入りの方法は、20ミリ秒毎のイベントキューにカスタムイベントをポストコールバック関数でSDL_AddTimerを使用して、定期的なタイマーを設定することですがあります。イベントループがこのイベントに来るときはいつでも、スプライトの位置を更新し、画面のそのセクションを再描画します(スプライトがどこにあったかの背景を描画し、新しい位置にスプライトを描画します)。

このようにするのは、画面の更新時に一時的に後退しても、スプライトの内部表現がまだ定期的に流れるという点です。これは、スプライトが突然画面の途中でジャンプして壁を通過するようになる可能性がある場合に、衝突検出を行っている場合に重要です。

+0

私はまだ20ミリ秒は決して保証されていないので、フレーム間の違いの時間をとっています。 – Lalaland

関連する問題