私は「落ちる砂」スタイルのゲームに取り組んでいます。
砂を画面に描画する方法をいろいろ試しましたが、いずれの方法も何らかの形で問題を引き起こすようです。
私が取り組んだことのリスト:
ピクセル サイズのテクスチャから一度に 1 つずつ、各ピクセルを個別に描画します。問題: 更新ごとに約 100,000 ピクセルが変更された後、速度が低下しました。
各ピクセルを 1 つの大きな texture2d に描画し、texture2d を描画してから、データをクリアします。問題: texture.SetPixel() の使用は非常に遅く、古いテクスチャを破棄しても、オブジェクトで dispose を呼び出した後でも、わずかなメモリ リーク (1 秒あたり約 30kb、すぐに加算されます) が発生します。私は単にそれを止める方法を理解できませんでした。ただし、全体としては、これが最良の方法です (これまでのところ)。その漏れを止める方法があれば、聞きたいです。
ビットマップからのロックビットの使用。これはビットマップの観点からは素晴らしく機能しましたが、残念ながら、ビットマップを texture2d に戻す必要があり、フレーム レートが 1 未満に低下しました。したがって、ビットマップを変換せずに xna で描画する方法 (または何か) を見つけることができれば、これは非常にうまく機能する可能性があります。
ピクセルの「古い」位置を透明なピクセルに置き換え、新しい位置を適切な色に設定することにより、各ピクセルを set pixel で texture2d に設定します。これにより、ジョブを完了するために必要なピクセル セットの数が 2 倍になり、番号 2 を使用するよりもはるかに遅くなりました。
それで、私の質問は、より良いアイデアはありますか?または、スタイル 2 または 3 を修正する方法についてのアイデアはありますか?