NDS Homebrew:精灵的多种动画速度

时间:2012-02-26 10:42:03

标签: c devkitpro

我最近一直在试验NDS自制软件的devkitARM工具链。然而,我想要更好地理解的是如何控制精灵动画速度。我知道这样做的唯一方法是“计算帧数”。例如,以下代码可以放在devkitpro附带的“animate_simple”示例中:

int main(void) {
    int frame = 0;
    ...
    while(1) {
    ...
        if(++frame > 9)
            frame = 0;
    }
    return 0;
}

这通常很好,但它确保在主循环中初始化的所有动画都以设定的速度运行。我怎么会有两个不同的精灵,每个精灵以不同的速度动画?任何见解将不胜感激。

1 个答案:

答案 0 :(得分:1)

为每个精灵使用单独的帧计数器。例如,您可以创建一个精灵结构:

typedef struct _Sprite Sprite;
struct _Sprite
{
    int frame;
    int count;
    int delay; /* handles the speed of animation */
    int limit;
};

// initialize all fields

void sprite_update(Sprite* s) 
{
    if ( ( s->count++ % s->delay ) == 0 ) )
    {
        if ( s->frame++ > s->limit ) s->frame = 0;
    }
}

为较快的动画赋予delay较小的值,为慢动画赋予较大的值。

样本用法:

Sprite my_spr, my_spr_2;

/* initialize the fields, or write some function for initializing them. */

my_spr.delay = 5; /* fast */
my_spr_2.delay = 10; /* slow */

/* < in Main Loop > */

while(1){
...
   sprite_update(&my_spr);
   sprite_update(&my_spr_2);
}

注意: 由于您只定位一个平台,控制动画速度的最佳方法是监视帧速率(或称为“计数帧”)。关于控制台编程的好处是,您不必设置定时延迟。由于相同型号的所有控制台设备通常以相同的速度运行,因此您在计算机(或仿真器)上获得的动画速度将与每个人获得的相同。不同的处理器在为PC编程时,速度是一个真正令人头痛的问题。