0

我正在 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

问题是它几乎可以工作,但在动画快结束时它会闪烁一次并继续动画。会是什么呢?

4

2 回答 2

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

现在好了。

于 2013-03-22T16:05:58.593 回答
0

如果没有看到动画精灵的代码,我真的无能为力,但是每次在动画中的同一点闪烁都会向我暗示一个无用的帧。可能发生的事情是你在最后画了一个空白框。一个可能的原因是一个直接的错误。如果您使用循环来迭代动画的帧,那么您的索引可能会超出一个(例如,使用>=而不是>),这意味着您正在绘制一个不应该存在的额外帧。你得到一个空白帧而不是崩溃的事实表明额外的帧落在精灵表中,无论是动画算法的结构还是运气。

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

于 2013-03-22T14:49:44.700 回答