XNA spriteBatch.Draw - 闪烁的精灵

时间:2013-03-22 14:41:14

标签: c# xna spritebatch

我在XNA中编写精灵动画。我使用spriteBatch.Draw方法来执行此操作:

spriteBatch.Draw(waterTexture, waterPosition, rectWater, Color.White * 1.0f, 0f, Vector2.Zero, 1.0f, SpriteEffects.None, 1.0f);
// 'rectWater' is rect used to cut sprite image from sprite texture

问题在于它是否有效,但在动画即将结束时它会闪烁一次并继续动画。它可能是什么?

2 个答案:

答案 0 :(得分:1)

好的,我弄清楚出了什么问题。

问题是,我错误地改变了框架,有时会跳到空白框架。看一下代码:

Rectangle rectWater = new Rectangle(((currentFrame % numerOfWaterSpriteFrames) % horizontalNumerOfWaterSpriteFrames) * (int)sizeOfWaterFrame.X, ((aktualnaFramka % numerOfWaterSpriteFrames) / horizontalNumerOfWaterSpriteFrames) * (int)sizeOfWaterFrame.Y, (int)sizeOfWaterFrame.X, (int)sizeOfWaterFrame.Y);
//The correct code

我没有在第一个和第二个Rectangle构造函数参数中通过 numerOfWaterSpriteFrames currentFrame 进行修改。就像这样:

Rectangle rectWater = new Rectangle((currentFrame % horizontalNumerOfWaterSpriteFrames) * (int)sizeOfWaterFrame.X, (aktualnaFramka / horizontalNumerOfWaterSpriteFrames) * (int)sizeOfWaterFrame.Y, (int)sizeOfWaterFrame.X, (int)sizeOfWaterFrame.Y);
//The wrong code

现在好了。

答案 1 :(得分:0)

如果没有看到动画精灵的代码,我真的帮不了多少,但每次动画中同一点闪烁都表明我有一个哑帧。可能发生的事情是你最后画了一个空白框架。造成这种情况的一个可能原因是一个简单的逐个错误;如果您使用循环迭代动画的帧,那么您的索引可能会被一个(例如,使用>=而不是>),这意味着您需要额外绘制一个不应该在那里的框架。你得到一个空白帧而不是崩溃的事实表明额外的帧落在spritesheet中,无论是通过动画算法的结构还是运气。

我需要看动画代码以确定发生了什么。