0

だから、現在私はゲームを書いていて、画面いっぱい (1680x1050) の小さなテクスチャ (20x20) を持っています。私のプレーヤーは、すべてゲーム ループ内で、この背景の上を移動します。背景を静的にして一度だけ描画する必要がありますが、SDL_RenderClear はすべての領域を再描画するため、遅延が発生します。一度描画してから、プレーヤーのフィギュアで更新するにはどうすればよいですか?

4

2 に答える 2

2

「一度描いてそのまま」というのはさすがにありませんが、キャラクターがいる背景の部分だけを描いて、新しいキャラクターを描く前に。

より詳細には、ヒーローが少しでも触れているすべての「ブロック」を描き、その上にヒーローを描きます。

次に例を示します。

//LocationX is the location of hero on the X axis
//LocationX /20 is the number of the first texture that is drawn on X axis
//LocationX +Width (width of hero) +20 (width of texture) this is the number of the last texture on X axis

//Now draw everything from first to last texture that is touched the hero (just calculate the Y axis the same way as X axis!)
for (int xxx = LocationX /20; xxx < LocationX +Width + 20; xxx++)
{
    for (/*Do the same for Y axis*/)
    {
        draw(texture, xxx *20, yyy *20);
    }
}
//Draw Hero here, the background is clear!
于 2013-11-29T07:12:51.573 に答える
1

文字通り答えると、SDL_RenderDrawRect「画面の一部をクリアする」ために使用する必要があります。

ただし、背景にテクスチャがあるとおっしゃいましたが、RenderClear はテクスチャを描画しないため、この説明の何かが間違っているようです。

于 2013-11-29T10:12:42.950 に答える