1

いくつかの2Dスプライトがいくつかの3DDrawableGameComponentsを遮るようにしたいと思います。簡単な例として、一時停止メニュー(2Dスプライトとして実装)を一時停止した宇宙船(3Dゲームコンポーネントとして実装)の上に描画する必要があります。

XNAフレームワークは、Microsoft.Xna.Framework.GameおよびMicrosoft.Xna.Framework.DrawableGameComponentからクラスのDrawメソッドを自動的に呼び出します。

私の経験では、描画順序は次のとおりです。

  1. ゲームのDraw()メソッド
  2. DrawableGameComponent Draw()メソッド

私のspriteBatch描画メソッド呼び出しは、私のGameクラスの描画メソッドです。したがって、宇宙船は一時停止メニューの上部に描画されます(読み取り不能になります)。

私の問題を解決する最も簡単な方法は、drawメソッドが呼び出される順序を逆にすることだと思います。これは可能ですか?

DrawableGameComponentsのDrawOrderを異なる値(1000、1、0、-1、-1000)に設定しようとしましたが、GameとDrawableGameComponentのインスタンス間のXNAフレームワークのDraw()メソッドの呼び出し順序には影響しません。

SpriteBatch Drawメソッド呼び出しのlayerDepthを調べましたが、GameクラスとDrawableGameComponentクラスの間のXNAFrameworkの描画順序とは関係がないようです。レイヤーの深さは、SpriteBatchのスプライトにのみ影響するようです。

XNAを使用するのは初めてですが、フレームワークについて質問しすぎているのではないかと思います。この場合、3Dオブジェクトの上に2Dオブジェクトを配置するための通常の方法は何でしょうか。

どんな援助もいただければ幸いです。

4

1 に答える 1

3

XNA を使用してからしばらく経ちましたが、クラスのメソッドでのbase.Draw()呼び出しはを反復処理すると思います。そのため、必要な順序に応じて、メソッドの描画ロジックの前または後にこの呼び出しを配置することができます。発生する呼び出し。 Draw()GameDrawableGameComponentsDraw

于 2010-07-11T07:31:59.837 に答える