Xna 为什么图形在spritebatch中出现在其他图形之前?

Xna 为什么图形在spritebatch中出现在其他图形之前?,xna,drawing,Xna,Drawing,我的程序有问题。我不明白屏幕是如何接管屏幕上的一切的。具体而言,我的代码如下所示: public override void Draw(GameTime gameTime, SpriteBatch spriteBatch) { spriteBatch.Begin(SpriteSortMode.Immediate, BlendState.AlphaBlend, null, null, null, null, cam.get_transformation(GestionEcr

我的程序有问题。我不明白屏幕是如何接管屏幕上的一切的。具体而言,我的代码如下所示:

public override void Draw(GameTime gameTime, SpriteBatch spriteBatch)
    {
        spriteBatch.Begin(SpriteSortMode.Immediate, BlendState.AlphaBlend, null, null, null, null, cam.get_transformation(GestionEcran.GraphicsDevice));

        //Draw the background
        decor.Draw(spriteBatch, gameTime, 255);

        //Draw the players
        Player2.Draw(spriteBatch, gameTime);
        Player1.Draw(spriteBatch, gameTime);

        //Draw the foreground
        decor.DrawPremierPlan(spriteBatch, gameTime, 70);


        if (aPlayerisWinning== true)
        {
            //THIS LINE "HITBOX" IS APPEARING BEFORE PLAYERPORTRAIT!!!!!!!!!!!!!!
            spriteBatch.Draw(hitBox, new Rectangle(0, 0, 500,500), new Color(255, 255, 255, 255));
            spriteBatch.Draw(PlayerPortrait, new Rectangle(0,0,500,500), new Color(255, 255, 255, 255));
        }
        spriteBatch.End();

        // USED FOR ADDITIVE BLENDING

        spriteBatch.Begin(SpriteSortMode.Deferred, BlendState.Additive, null, null, null, null, cam.get_transformation(GestionEcran.GraphicsDevice));
        {
            Player1.DrawEffects(spriteBatch,gameTime);
            Player2.DrawEffects(spriteBatch,gameTime);
        }
        spriteBatch.End();
正如您所见,hitbox(一个白色屏幕)必须出现在PlayerPortrait的后面,但它不起作用。白色屏幕覆盖其他图纸

你知道吗? Thx

编辑:SpriteSortMode没有任何更改。背对背、背对背和纹理与我的重叠结构混乱。“立即”和“差异”效果很好,但在白色屏幕上也有同样的问题。 正如在第一个答案的链接中所说,deffered draw在一批中绘制所有精灵,按照相同的顺序接收绘制调用。那么,为什么我的倒数第二个调用出现在我的最后一个调用之前?

请查看其他枚举数

您可以使用
BackToFront
FrontToBack
更改绘图顺序,这实际上只是
延迟模式的变体<代码>纹理
是另一个版本的
延迟
,它将对纹理进行排序,从而获得性能。

查看其他枚举器


您可以使用
BackToFront
FrontToBack
更改绘图顺序,这实际上只是
延迟模式的变体<代码>纹理
是延迟的另一个版本,它将对纹理进行排序,从而获得性能。

我通过使用每次绘制的alpha找到了解决方案。它达到了我想要的效果,绕过了这个问题

解决方案2:
当播放alpha通道以在透明度上播放时,您也需要操纵RGB以使屏幕透明。我不知道。

我通过玩每次平局的阿尔法找到了解决办法。它达到了我想要的效果,绕过了这个问题

解决方案2:
当播放alpha通道以在透明度上播放时,您也需要操纵RGB以使屏幕透明。我不知道。

谢谢,但没有更改,我的第二个至最后一个电话显示在我的最后一个电话之前。谢谢,但没有更改,我的第二个至最后一个电话显示在我的最后一个电话之前。