繁体   English   中英

小故障绘图2D纹理

[英]Glitch drawing 2D textures

我在绘制多余的纹理时遇到问题。
这就是世界的样子:红色方块=玩家,绿色部分=污垢。
Paint.NET中的世界

这就是世界的样子:
世界游戏

如您所见,还有一些额外的纹理(它们没有碰撞或它们只是在屏幕上绘制的东西)

这是我的尘土精灵表:
污垢雪片

这是我的绘图代码:

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM