使用 XNA/Monogame 从 spritesheet 中绘制一个 sprite
Posted
技术标签:
【中文标题】使用 XNA/Monogame 从 spritesheet 中绘制一个 sprite【英文标题】:Drawing a sprite from a spritesheet using XNA/Monogame 【发布时间】:2018-03-14 04:10:34 【问题描述】:我有一个包含 2 个精灵的精灵表。每个精灵是 40x60。图像的总尺寸为 40x120。 它看起来像这样(红线是第一个精灵的一部分)。稍后我会告诉你我为什么添加它。
似乎由于某种原因,当尝试绘制第二个精灵时,它总是会占用前一个精灵的最后一行。我画了那条红线来说明这一点。
这是我绘制第二个精灵的代码:
Rectangle rect = new Rectangle(0, 60, 40, 60); // Choose 2nd sprite
Vector2 pos = new Vector2(100, 100);
Vector2 origin = new Vector2(0, 0);
spriteBatch.Begin();
spriteBatch.Draw(mSpriteTexture, pos , rect, Color.White, 0.0f, origin, 6, SpriteEffects.None, 0.0f);
spriteBatch.End();
这就是我运行程序时的样子:
任何想法我做错了什么?
注意:在本例中,我使用的是 scale=6。我这样做是因为似乎当 scale > 1 时这个问题总会发生。如果 scale = 1,它似乎不会一直发生。
【问题讨论】:
在选择第二个精灵时,您是否尝试过在 Rectangle Y 位置使用 61? 那行不通。精灵重叠得更多。 这里讨论了这个问题并提供了一些可能的解决方案:gamedev.stackexchange.com/questions/45764/… 您是否尝试使用destinationRectangle 而非缩放来使用spriteBatch 进行绘制?不保证修复,只是建议您尝试一下,看看它是否有效。 Monacraft,感谢您的链接和建议。它提供了一些新的想法来尝试,但似乎作者从未找到解决方案。我已经尝试过其中的大部分。使用 PointClamp 改善了很多,但问题仍然时有发生。我最终添加了一些瓷砖空间,问题就消失了。不是最好的解决方案,但我现在修好了。 【参考方案1】:有同样的问题。在我的 spriteBatch.Begin 中使用 SamplerState.PointClamp - 调用修复它
看起来像这样:(MonoGame 3.6 tho)
SpriteBatch.Begin(SpriteSortMode.Deferred, BlendState.NonPremultiplied, SamplerState.PointClamp, null, null, null, viewMatrix);
【讨论】:
以上是关于使用 XNA/Monogame 从 spritesheet 中绘制一个 sprite的主要内容,如果未能解决你的问题,请参考以下文章