Ah oui, je m'étais fait un joli scorpion qui marche, mais si vous parvenez à l'assommer, tout à coup, il ne ressemble plus qu'à un tas de pixels complètement glitché. Comme j'envisage de passer refaire un coucou au "gaming club" de vendredi, ça ne serait pas mal de corriger un peu ça.
La cause du problème, je la connais: l'animation de la marche est construite avec 5 sprites hardware: un "large" pour la carapace du scorpeye et un carré pour chaque "patte". En revanche, les animations "carapace seule" et "carapace qui tourne parce qu'on l'a lancée" sont toujours inchangées et n'utilisent que 3 sprites hardware. Et le couac, c'est qu'en plus, le sprite large n'est pas sur le même d'une animation à l'autre. Il était donc temps que je me gratte un peu la tête et que je retrouve les fonctions-clé pour gérer ça, en particulier loadAnim() dans CompoundGob et setupOAM() qui peut redéfinir les tailles et aspects des sprites.
void refreshPages(const GobAnim *ani) {
unsigned nlimbs = ani->getnlimbs();
unsigned i;
pages = ani->getpages();
for (i = 0; i < nlimbs; i++) {
if (oam[i]==NO_OAM) continue;
pages[i]->setupOAM(sprites + oam[i], 0 /*?*/);
}
for (; i < nboam; i++) {
if (oam[i]==NO_OAM) continue;
sprites[oam[i]].attribute[0] = ATTR0_DISABLED;
}
nboam = nlimbs;
} Je dois dire qu'au départ, je m'attendais à plus compliqué, mais la petite fonction ci-dessus et une brave ligne de plus, les animations se sont réparées presque d'elles-même. à utiliser avec prudence tout de même: le système ne se déclenche que si les deux animations ont un nombre différent de sprites.


Vote for your favourite post
