【问题标题】:Why does a drawing appear before the others in spritebatch?为什么在 spritebatch 中一张图出现在其他图之前?
【发布时间】:2013-08-10 15:35:01
【问题描述】:

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

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 的调用。那么为什么我的倒数第二个电话出现在我最后一个电话之前呢?

【问题讨论】:

    标签: xna drawing


    【解决方案1】:

    查看其他 SpriteSortMode 枚举器。

    您可以使用BackToFrontFrontToBack 更改绘制顺序,它们实际上只是Deferred 模式的变体。 TextureDeferred 的另一个版本,它将对纹理进行排序,从而提高性能。

    【讨论】:

    • 谢谢,但没有任何改变,我的倒数第二个电话出现在我最后一个电话之前。
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-04-24
      • 2021-12-23
      • 1970-01-01
      • 2020-05-09
      • 1970-01-01
      • 1970-01-01
      • 2021-10-26
      • 2016-10-28
      相关资源
      最近更新 更多