1

我正在让角色运行,但动画非常快,就像我在做的那样:

_frameIndex++;

_frameIndex;是指向 SpriteSheet 中图像的值。有谁知道我可以用它gameTime.ElapsedGameTime.TotalMilliseconds来减慢动画速度吗?

4

2 回答 2

3

我看到你今晚问了几个关于动画和精灵表的问题,所以这里有一个来自 Aaron Reed 的“学习 XNA 4.0 ”的例子,来自第 3 章的“调整动画速度”标题。

首先,创建两个类级变量来跟踪动画帧之间的时间:

int timeSinceLastFrame = 0;
int millisecondsPerFrame = 50;

第一个变量跟踪自动画帧更改以来经过的时间,第二个变量是您指定在再次移动帧索引之前等待的任意时间。所以millisecondsPerFrame变小会提高动画速度,变大会降低动画速度。

现在,在您的更新方法中,您可以利用game.ElapsedGameTime检查自上次帧更改以来经过的时间,并在该值大于毫秒每帧时更改帧,您可以执行以下操作:

timeSinceLastFrame += gameTime.ElapsedGameTime.Milliseconds;
if (timeSinceLastFrame > millisecondsPerFrame){
    timeSinceLastFrame -= millisecondsPerFrame;
    // Increment Current Frame here (See link for implementation)
}

这种解决方案与您发现的解决方案类似,只是您可以采取额外的步骤来准确指定您希望动画更新的频率,或者如果您愿意,甚至可以稍后在您的代码中更改该持续时间。例如,如果有一些条件会“加速”精灵(如上电)或同样减慢它,您可以通过更改millisecondsPerFrame.

我删除了实际更新当前帧的代码,因为你应该已经有了一些可以做到这一点的东西,因为你有一个工作动画。如果您想查看完整的示例,可以从教科书的网站下载。

于 2013-03-24T03:26:21.583 回答
1

我调试了代码,发现gameTime.ElapsedGameTime.TotalMilliseconds总是等于 33。所以我做了以下事情:

milliSeconds += gameTime.ElapsedGameTime.Milliseconds; if (milliSeconds > 99) { _frameIndex++; milliSeconds = 0; }

这基本上意味着如果这是游戏的第三帧,那么让他的_frameIndex上升。重置毫秒以重新开始。

于 2013-03-24T03:12:56.370 回答