2016-07-05 12 views
0

私は描画のための動きを可能にするカメのクラスを書いています。私はそれのためのゲームループを使用していない。SDL2とC++に関する画像アニメーションにつきまして

Turtle t; 
t.forward(50); 
t.left(90); 

タートルコンストラクタはウィンドウとレンダラの作成の心配を取りますように、この亀のオブジェクト のユーザーがコマンドを発行します。 すべての相互作用はプログラミングによるものです。あらゆるタイプのキーボードイベントのポーリングはありません。今、私は次のコードを使用してスパイラルアニメーションをレンダリングすることができる午前:

int main(int argc, char* args[]){ 
    Turtle t; 
    t.clear(); 

    t.color("red"); 
    int numofside = 100; 
    t.shape("seaturtle"); 

    for (int i=0; i<numofside; i++) 
    { 
     t.forward(i + 5); 
     t.left(75); 
     SDL_RenderPresent(m_pRenderer); 
     SDL_Delay(50); 
    } 

    SDL_Delay(5000); 
    IMG_Quit(); 
    SDL_Quit(); 
} 

大きな問題は今、ウミガメの画像がレンダリングされているラインをたどる持ってする方法ですか?

フレーム(ループ)を使用してSDL2でアニメーションを行う、つまり画面をクリアする、現在の位置にレンダリングする、x、yを大きくするという概念を理解しています。

しかし、描画された既存の線が消去されるため、画面をクリアできません。

画面全体を削除せずに画像を表示/非表示にできるSDLテクスチャ機能はありますか?またはそれを行うの任意のアイデア?

答えて

1

XORを使用して「タートル」を描くことができます。次に、それを書き換えて消去します。

描画された線を追跡することもできます。そのため、表示を消去するとすべてを再描画できます。

複数の描画面を使用することもできます。 1つは「背景」、1つは描画する線、もう1つは「カメ」です。次に、カメの表面を移動するときにのみ、そのカメの表面を描画/消去/再描画し、最後にすべてのレイヤーを重ねて表示します。一種のマルチバッファアプローチ。

1

抽象的な基底クラスDrawInstruction*を使用して、描画するものをベクターに入れて保存します。次に、クリア画面の後に再描画することができます。このベクターは、グローバルであるか、より良い意味では、Turtleクラスのメンバーです。

関連する問題