2012-02-26 72 views
0

最近,我一直在试验用于NDS自制软件的devkitARM工具链。然而,我想更好地理解的是如何控制精灵动画的速度。我知道这样做的唯一方法是通过“计数帧”。例如,下面的代码可以被放置成与包含所述devkitpro“animate_simple”例如:NDS Homebrew:精灵的多个动画速度

int main(void) { 
    int frame = 0; 
    ... 
    while(1) { 
    ... 
     if(++frame > 9) 
      frame = 0; 
    } 
    return 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编程时,速度是一个非常头疼的问题。