0

我的程序有问题。我不明白屏幕如何接管屏幕上的其他所有内容。详细来说,我的代码如下所示:

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 后面,但它不起作用。白色的屏幕覆盖了所有其他图纸。

你有什么主意吗?谢谢。

编辑:SpriteSortMode 没有任何改变。BacktoFront、FrontToBack 和 Texture 弄乱了我的重叠结构。立即和延迟效果很好,但白屏也有同样的问题。正如第一个答案的链接中所说,延迟绘制一批中的所有精灵,以相同的顺序收到对 Draw 的调用。那么为什么我的倒数第二个电话出现在我最后一个电话之前呢?

4

2 回答 2

2

查看其他SpriteSortMode枚举器。

您可以使用BackToFrontand更改绘制顺序FrontToBack,这实际上只是Deferred模式的变体。Texture是另一个版本,Deferred它将对纹理进行排序,从而获得性能。

于 2013-08-09T23:26:38.770 回答
1

我通过玩每次平局的 alpha 找到了解决方案。它达到了我想要的效果并绕过了问题

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

于 2013-08-10T07:15:08.440 回答