我在绘制额外纹理时遇到问题。
这就是世界应该是这样的:红色方块=玩家,绿色部分=污垢
这就是世界的样子:
如您所见,有一些额外的纹理(它们没有碰撞或只是在屏幕上绘制的任何东西)
这是我的污垢精灵表:
这是我的绘图代码:
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();
}
答案 0 :(得分:1)
您根本不会重新绘制蓝色背景;您应该尽可能多地重绘它。
以下代码段暗含一些有关您的代码的假设。
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;
)中:它将使一次编辑变得更容易,它将使您的代码更具可读性,并且完全不会影响性能。