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