私はスプライトを扱うのがまったく初めてです。
ゲーム インターフェイス用に不透明なスプライト レイヤーを描画する必要があります。これらの描画呼び出しのメソッドは、2 つの異なるクラスで定義されています。
public class ColorStreamRenderer : Object2D
{
.
.
public override void Draw(GameTime gameTime)
{
.
.
this.Game.GraphicsDevice.Clear(Color.White);
this.SharedSpriteBatch.Begin(SpriteSortMode.BackToFront, BlendState.Additive);
this.SharedSpriteBatch.Draw(this.backBuffer, new Rectangle(0, 0, 1280, 960), null, Color.White);
this.SharedSpriteBatch.End();
.
.
}
と
public class AvateeringXNA : Microsoft.Xna.Framework.Game
{
.
.
protected override void Draw(GameTime gameTime)
{
.
.
private Texture2D recttex;
.
GraphicsDevice.Clear(Color.Black);
spriteBatch.Begin(SpriteSortMode.Texture, BlendState.Opaque);
this.recttex = Content.Load<Texture2D>("doodle");
spriteBatch.Begin(SpriteSortMode.Texture, BlendState.Opaque);
spriteBatch.Draw(recttex, rightMenu[ID], Color.White);
spriteBatch.End();
.
.
}
rightMenu[ID]
Microsoft.Xna.Framework.Rectangle
出力表示ウィンドウ内にある です。
この 2 つのクラスは既にそれぞれ 1 つのクラスを継承しており、C# では多重継承が許可されていないためContent.Load
、クラス内で使用することはできませんColorStreamRenderer
。したがって、スプライトは異なるクラスで描画する必要があります。
問題は、スプライトの深さを制御できないことです。どのパラメータを渡しても、クラスのスプライトAvateeringXNA
は常にクラスのスプライトの後ろにありColorStreamRenderer
ます。画面上のブレンド オプションを微調整することで、背後のレイヤーが部分的に表示されているため、これらが実際に画面に描画されていることがわかります。
SharedSpriteBatch.Begin
andのすべてのオーバーロードを試しましたがSharedSpriteBatch.Draw
、どれも機能しません。とのlayerDepth
パラメータで深さを明示的に定義しても機能しません。SharedSpriteBatch.Draw
spriteBatch.Draw