XNA减慢动画

时间:2013-03-24 02:59:27

标签: c# xna sprite-sheet

我正在制作角色,但动画非常快,正如我所做的那样:

_frameIndex++;

_frameIndex;是指向SpriteSheet中图像的值。有谁知道如何使用gameTime.ElapsedGameTime.TotalMilliseconds来减慢动画速度?

2 个答案:

答案 0 :(得分:3)

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

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

int timeSinceLastFrame = 0;
int millisecondsPerFrame = 50;

第一个变量跟踪自动画帧更改后经过的时间,第二个变量是指定在再次移动帧索引之前等待的任意时间量。因此,使millisecondsPerFrame变小会增加动画速度,而变大则会降低动画速度。

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

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

这种解决方案与您发现的解决方案类似,不同之处在于您可以采取额外步骤来指定您希望动画更新的频率,甚至可以在以后更改该持续时间在你的代码中,如果你喜欢。例如,如果某些条件可以“加速”精灵(如加电)或同样减慢速度,则可以通过更改millisecondsPerFrame来实现。

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

答案 1 :(得分:1)

我调试了代码并注意到gameTime.ElapsedGameTime.TotalMilliseconds总是等于33.所以我做了以下内容:

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

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

相关问题