2011-01-02 12 views
0

それはnoobの質問かもしれませんが、ここで、それは私がXNAフレームワーク(3.1)でのVisual Studioを使用していると私は2Dのみを描画するつもりだ...重ね合わせ問題(XNA)

です私のゲームのためスプライト、ここでの主なクラスのdrawメソッドは次のとおりです。

GraphicsDevice.Clear(Color.CornflowerBlue); 
      spriteBatch.Begin(SpriteBlendMode.AlphaBlend, SpriteSortMode.Immediate, SaveStateMode.None); 
      background.Draw(this.spriteBatch); 
      player1.Draw(this.spriteBatch); 
      player2.Draw(this.spriteBatch); 
      spriteBatch.End(); 
      base.Draw(gameTime); 

問題は(彼は後に描かれているので)player2がplayer1を重ねている、と私は2の最低の1をたいということです(その位置によって)最後に描かれる(深さをシミュレートする)。

ありがとうございます! (そして、私のエンリグリッシュには、私はフランス語です。)

+0

DepthBufferについてお話していると思いますか?私はそれを使用する方法を本当に知らない、私は追加:spriteBatch.GraphicsDevice.RenderState.DepthBufferEnable = true; と変更されていません。 私はそれを間違った方法で使用する必要があります... – jobadluck

答えて

2

'layerDepth'パラメータを提供するSpriteBatch.Drawメソッドのオーバーロードがあります(frontは0、backは1から)。個々のスプライトのlayerDepthを設定し、SpriteBatch.BeginメソッドでspriteSortMode.BackToFrontを使用することができます。

+0

これは私が探していたものだと思いますが、この 'layerDepth'にアクセスして設定する方法は? – jobadluck

+0

スプライトごとに1つのfloat変数を作成し、関連するスプライトを配置する値に任意の値を設定します(奥行き方向)。次に、この変数をDraw()メソッドのオーバーロードのパラメータとして挿入します。変数を設定するロジックは、ゲームデザインのニーズに応じて異なりますが、背中に入れたいスプライトのいずれかに、変数を1に近い値に設定します。どちらを先にしても変数を0に近づけます。忘れないでくださいBegin()メソッドでソートモードを設定します。 –

0

スティーブに感謝します。私はそれをしました。 私のプレーヤーSpriteBatch.DrawメソッドをSpriteBatch.Draw(X、X、(...)、layerDepth) に変更しました。layerDepthはプレーヤーのY位置で更新されています。 spriteSortMode.FrontToBackを使用する必要がありました:原点が左上隅にあるため、すべてが逆転しました。 ありがとう!

+1

これはコメントだったはずです –

0

スティーブの答えはおそらく最も簡単ですが、時には即時の描画が有利です。 代わりに、プレイヤーとオブジェクトをY軸に基づいて並べ替えることができます。

関連する問題