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

时间:2013-08-09 21:58:50

标签: xna drawing

我的程序有问题。我不明白屏幕是如何占据屏幕上的其他内容的。详细信息,我的代码如下所示:

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没有任何变化。 BacktoFront,FrontToBack和Texture混乱了我的重叠结构。 Immediate和Deffered运行良好,但白屏有同样的问题。 正如在第一个答案的链接中所述,deffered在一个批次中绘制所有精灵,以相同的顺序接收对Draw的调用。那么为什么我的倒数第二次呼叫出现在我的最后一次通话之前呢?

2 个答案:

答案 0 :(得分:2)

查看其他SpriteSortMode枚举器。

您可以使用BackToFrontFrontToBack更改绘制顺序,这些只是Deferred模式的变体。 TextureDeferred的另一个版本,它会对纹理进行排序,从而获得性能。

答案 1 :(得分:1)

我通过玩每次抽奖的alpha来找到解决方案。它实现我想要的效果并绕过问题

解决方案2: 当使用Alpha通道播放透明度时,您还需要操作RGB以使屏幕透明。我不知道。