为每个精灵使用单独的帧计数器。例如,您可以创建一个 sprite 结构:
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 编程时,不同的处理器速度是一个真正令人头疼的问题。