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。纹理使用纹理加载的顺序来决定绘制顺序,但它从未明确解释如何使用它来获得正确的顺序。如果有人能解释一下这到底是怎么回事,那就太好了!
基本上,无论您在SpriteBatch
中调用spriteBatch.Draw()
的顺序如何,SpriteSortMode.Texture
都会按纹理对其进行排序,以尝试加快渲染速度。你可以得到几乎相同的速度,但没有按纹理排序,这是给你这种行为通过使用SpriteSortMode.Deferred
。
其他SpriteSortModes可以在MSDN上找到