質問
私は、画面上のすべてのピクセルをカバーし、配列を反復処理したいと思います。すなわちます:
for (int y = 598; y > 0; y--)
{
for (int x = 798; x > 0; x--)
{
if (grains[x][y])
{
spriteBatch.Draw(Grain, new Vector2(x,y), Color.White);
}
}
}
...私の質感は、配列の値がtrueの場合、画面に描画される1×1ピクセルの画像です。これは、まともな動作します - しかし、より多くのスクリーンIカバーラグは間違いなくあります。私が達成しようとしているものを達成するためのより良い方法はありますか?
解決
は代わりX X Y個々のスプライトを使用する、単一の画像を作成し、適切に画素を設定します。それからちょうど単一のスプライトのテクスチャとして画像全体をレンダリングします。
。むしろ、ほぼ50万スプライト -ジャグ配列は、最も可能性が高いのありませんの問題であり、
他のヒント
問題は、各フレームの描画メソッド内でCPU時間の多くを費やしているということです。あなたのゲームのインスタンスのDrawメソッドは、常に一定時間内かどうかにかかわらず、多くの場合、可能な限り呼び出されます。ことを考えると、あなたは常にあなたが最もGPU上での作業の場所にしたい意味し、できるだけそこに少しの時間として必ずしている支出したい。
spriteBatch.Draw
へのforループネストされただけでなく、すべてのコールは、描画遅れている手段、あなたのループがどんどん大きくなる場合は特に、はるかに遅いCPUを使用しようとしている。
は、描画ごとに、各フレームは、それについて移動する最良の方法は、GPU上で作業を置き、ピクセルシェーダを使用することです。あなたは1つのテクスチャ希望するサイズを作成し、同じ目標を達成する他の方法の中で、あなたの「オンまたはオフ」の情報を保持シェーダに配列を渡すことで、独自の問題を達成することができます。
所属していません StackOverflow