[英]Glitch drawing 2D textures
我在绘制多余的纹理时遇到问题。
这就是世界的样子:红色方块=玩家,绿色部分=污垢。
这就是世界的样子:
如您所见,还有一些额外的纹理(它们没有碰撞或它们只是在屏幕上绘制的东西)
这是我的尘土精灵表:
这是我的绘图代码:
public void DrawStatics(Block[,] blocks)
{
spriteBatch.Begin(WorldManager.Instance.currentWorld.camera, SpriteSortMode.Deferred, samplerState: SamplerState.PointClamp);
foreach (Block block in blocks)
{
if (block == null || block.id == BlockID.Air) continue;
spriteBatch.Draw(texture: block.texture, position: block.position, color: Color.White, sourceRectangle: new Rectangle(block.index * 20, 0, block.index * 20 + 20, 20));
}
spriteBatch.End();
}
您根本不会重新绘制蓝色背景; 您应该尽可能多地重绘它。
以下代码段暗含一些有关您的代码的假设。
public void DrawStatics(Block[,] blocks)
{
spriteBatch.Begin(
WorldManager.Instance.currentWorld.camera,
SpriteSortMode.Deferred,
samplerState: SamplerState.PointClamp
);
foreach (Block block in blocks)
{
if (block != null)
{
// Not ignoring BlockID.Air
spriteBatch.Draw(
texture: block.texture, // There should be a texture for BlockID.Air...
position: block.position,
color: Color.White, // ...or a block.color could be saved as a fallback.
sourceRectangle: new Rectangle(
block.index * 20, 0, block.index * 20 + 20, 20)
);
}
}
spriteBatch.End();
}
关于编码风格的注意事项:
continue
语句会使代码流难以遵循; 通常不鼓励使用它,而没有它,您的代码实际上会更短。 20
为常量( const int tileSideInPX = 20;
):它可以使一次编辑变得更加容易,它将使您的代码更具可读性,并且完全不会影响性能。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.