1

在我的 XNA 游戏中,我经常使用 spritesortmode.texture,因为它应该是一种相当便宜的绘图方式。我的问题是大多数时候事情都以正确的方式绘制,但有时事情是错误的(即背景绘制在前景上)这似乎受桌面分辨率的影响,无论是全屏还是第二显示器已插入我的笔记本电脑。

这是我的绘图块的一部分,显示了这些有时会混淆的东西是在哪里绘制的。

 //============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.texture 使用加载纹理的顺序来确定绘制顺序,但从未明确解释过如何使用它来获得正确的顺序。如果有人可以解释这实际上应该如何工作,那就太好了!

4

1 回答 1

3

基本上,无论您spriteBatch.Draw()在 a中调用什么顺序SpriteBatchSpriteSortMode.Texture都会按纹理对其进行排序以尝试加快渲染速度。您可以获得几乎相同的速度,但没有使用SpriteSortMode.Deferred.

其他SpriteSortModes可以在 MSDN 上找到。

于 2013-04-28T01:55:53.327 回答