Question

J'ai expérimenté la chaîne d'outils Devkitarm pour NDS Homebrew récemment. Quelque chose que je voudrais mieux comprendre, cependant, c'est comment contrôler les vitesses d'animation de sprite. La seule façon dont je connais cela est de «compter les cadres». Par exemple, le code suivant pourrait être placé dans l'exemple "Animate_simple" inclus avec Devkitpro:

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

C'est généralement bien, mais cela garantit que toute l'animation initialisée dans la boucle principale fonctionne à une vitesse définie. Comment pourrais-je avoir deux sprites différents, chacun animé à différentes vitesses? Toute idée serait grandement apprécié.

Était-ce utile?

La solution

Utilisez un compteur de trame séparé pour chaque sprite. Par exemple, vous pouvez créer une structure 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;
    }
}

Donner delay petite valeur pour l'animation plus rapide et une valeur plus grande pour l'animation lente.

Exemple d'utilisation:

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

Noter:Étant donné que vous ciblez une seule plate-forme, la meilleure façon de contrôler la vitesse d'animation est de surveiller la fréquence d'images (ou de "compter les cadres" comme vous l'appelez). Une bonne chose à propos de la programmation pour les consoles est que vous n'avez pas à définir retards chronométrés. Étant donné que tous les périphériques de console du même modèle fonctionnent généralement à la même vitesse, donc la vitesse d'animation que vous obtenez sur votre machine (ou émulateur) sera la même que tout le monde obtiendra. Différentes vitesses de processeurs sont un vrai mal de tête lors de la programmation pour le PC.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top