我在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
问题在于它是否有效,但在动画即将结束时它会闪烁一次并继续动画。它可能是什么?
答案 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中,无论是通过动画算法的结构还是运气。
我需要看动画代码以确定发生了什么。