首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NDS Homebrew: Sprite的多种动画速度

NDS Homebrew: Sprite的多种动画速度
EN

Stack Overflow用户
提问于 2012-02-26 18:42:03
回答 1查看 298关注 0票数 0

最近,我一直在尝试NDS自制软件的devkitARM工具链。然而,我想更好地理解的是,如何控制精灵动画的速度。据我所知,唯一的方法就是“计算框架数”。例如,可以将以下代码放入devkitpro附带的"animate_simple“示例中:

代码语言:javascript
复制
int main(void) {
    int frame = 0;
    ...
    while(1) {
    ...
        if(++frame > 9)
            frame = 0;
    }
    return 0;
}

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-02-26 18:56:49

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

代码语言:javascript
复制
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值,为较慢的动画指定较大的值。

示例用法:

代码语言:javascript
复制
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编程时,不同的处理器速度是一个令人头疼的问题。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9452439

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档