2012-02-26 79 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編程時,速度是一個非常頭疼的問題。