私はスプライトを扱うのがまったく初めてです。
ゲーム インターフェイス用に不透明なスプライト レイヤーを描画する必要があります。これらの描画呼び出しのメソッドは、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.Beginandのすべてのオーバーロードを試しましたがSharedSpriteBatch.Draw、どれも機能しません。とのlayerDepthパラメータで深さを明示的に定義しても機能しません。SharedSpriteBatch.DrawspriteBatch.Draw