GetData()を使用しないXNA 2D衝突検出


7

私は現在、地形の変形を伴うワームゲームに取り組んでいます。以前はを使用し.GetData()てカラー配列を変更してからを使用していましたが、.SetData()代わりに(RenderTargetsを使用して)GPUで作業を行うように変更を検討しました。

すべて順調ですが、別の問題に直面しています。地形に対する衝突全体の検出は、地形を表すカラー配列に基づいていましたが、そのカラー配列はもうありません。.GetData()テレインを変更してColor配列を更新するたびに使用できますが、それでは最初の変更の目的が損なわれます。

私が大丈夫だと思うのは.GetData()、最初に一度使用し、その後、他の方法で地形に加えた変更に基づいてその配列を変更することです。私はこれをどのように行うのかわかりませんが、誰でも手助けできますか?

回答:


3

私は少し調査しましたが、地形が変更されるたびにGetData呼び出しを取り除くための解決策をまだ見つけていませんが、それを「最適化」する方法、または少なくともGetData呼び出しを減らす方法を見つけました可能な限り。

  • クレーターの描画はバッチ処理されます。つまり、作成時に1つずつ描画するのではなく、それらをリストに追加して、数フレームごとにすべて描画します。これにより、GetData呼び出しの数が減ります。クレーターごとではなく、クレーターのバッチごとに1つです。

  • レンダーターゲットにクレーターを描画した後、GetDataを呼び出す前に数フレーム待って、GPUがすべての描画コマンドを処理したことを確認します。これにより、パイプラインのストールが最小限に抑えられます。

  • 保留中のGetData呼び出しがあり、さらにクレーターが入る場合、GetData呼び出しが完了するまでクレーターはバッチ処理されたままになります。つまり、描画と取得は同期しているため、クレーターのバッチを描画した後は常に数フレーム後にGetData呼び出しが発生し、新しいクレーター描画リクエストは保留中のGetDataが終了するまで待機します。

他の誰かが他に何か提案があれば、私はまだそれらを聞いてうれしいです。


私は疑問に思っていました:ゲームがターンベースの場合、GetData()各ターンの開始時に1つのコールを行うだけではいいのではないですか?
ジョナサンコネル
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.