NDS Homebrew: несколько скоростей анимации для спрайтов - PullRequest
0 голосов
/ 26 февраля 2012

Я недавно экспериментировал с набором инструментов devkitARM для домашнего пивовара NDS.Однако мне хотелось бы лучше понять, как контролировать скорость анимации спрайтов.Единственный способ, которым я знаю, это «подсчитывать кадры».Например, следующий код может быть помещен в пример «animate_simple», включенный в devkitpro:

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

Как правило, это нормально, но он гарантирует, что вся анимация, инициализированная в основном цикле, запускается с заданной скоростью,Как бы мне было иметь два разных спрайта, каждый из которых анимировался на разных скоростях?Любая идея будет принята с благодарностью.

1 Ответ

1 голос
/ 26 февраля 2012

Используйте отдельный счетчик кадров для каждого спрайта. Например, вы можете создать структуру спрайта:

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);
}

Примечание: Поскольку вы ориентируетесь только на одну платформу, лучший способ контролировать скорость анимации - отслеживать частоту кадров (или «подсчитывать кадры», как вы ее называете). Хорошая вещь в программировании консолей заключается в том, что вам не нужно устанавливать временные задержки . Поскольку все консольные устройства одной и той же модели обычно работают с одинаковой скоростью, скорость анимации на вашей машине (или в эмуляторе) будет одинаковой для всех. Разные скорости процессора - настоящая головная боль при программировании для ПК.

...