0

私はスプライトを扱うのがまったく初めてです。

ゲーム インターフェイス用に不透明なスプライト レイヤーを描画する必要があります。これらの描画呼び出しのメソッドは、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

4

1 に答える 1