SpriteSortMode.纹理,有时绘制顺序是错误的

本文关键字:顺序 错误 绘制 纹理 SpriteSortMode | 更新日期: 2023-09-27 18:11:05

在我的XNA游戏中,我使用spritesortmode。纹理很多,因为它应该是一个相当便宜的绘图方式。我的问题是,大多数时候画的都是对的,但有时画错了。背景绘制在前景之上)这个似乎受到桌面分辨率的影响,无论是全屏,还是我的笔记本电脑上插入了第二个显示器。

这是我的绘制块的一部分,显示了这些有时会混淆的东西的绘制位置。

 //============SPritebatch for background LINEAR WRAP textures===============
        spriteBatch.Begin(SpriteSortMode.Texture, BlendState.Opaque, SamplerState.LinearWrap,
               DepthStencilState.Default,
                RasterizerState.CullNone, null, _camera.Transform);
            Globals.CurrentLevel.CurrentRoom.DrawBg(spriteBatch);
            spriteBatch.End();
        }
  //===========SPritebatch for foreground objects, blocks etc.=================
        spriteBatch.Begin(SpriteSortMode.Texture, BlendState.Opaque, SamplerState.LinearClamp,
               DepthStencilState.Default,
               RasterizerState.CullNone, null, _camera.Transform);
        //Draw Currentroom
        Globals.CurrentLevel.CurrentRoom.Draw(spriteBatch);
        spriteBatch.End();

在这里我加载纹理..(我同时加载它们)

    namespace Artefact001
    {
        class Textures
        {
            public Texture2D TiledBG01Texture { get; private set; }
            public Texture2D Blocktxture { get; private set; }
            public Texture2D ProjectileTxture { get; private set; }
            public Texture2D PointLightTexture32 { get; private set; }
            public Textures(Game game)
            {          
                PointLightTexture32 = LightTextureBuilder.CreatePointLight(game.GraphicsDevice, 32);
                Blocktxture = game.Content.Load<Texture2D>(".''WallGraphics''blocks");
                ProjectileTxture = game.Content.Load<Texture2D>(".''splosions''projectile01");
                TiledBG01Texture = game.Content.Load<Texture2D>(".''BGgraphics''bgtile01");
            }
        }
    }

我在几个地方读到spritesortmode。纹理使用纹理加载的顺序来决定绘制顺序,但它从未明确解释如何使用它来获得正确的顺序。如果有人能解释一下这到底是怎么回事,那就太好了!

SpriteSortMode.纹理,有时绘制顺序是错误的

基本上,无论您在SpriteBatch中调用spriteBatch.Draw()的顺序如何,SpriteSortMode.Texture都会按纹理对其进行排序,以尝试加快渲染速度。你可以得到几乎相同的速度,但没有按纹理排序,这是给你这种行为通过使用SpriteSortMode.Deferred

其他SpriteSortModes可以在MSDN上找到