mardi, août 05, 2014

Corner Case

Oui, voici *encore* Bilou coincé dans un mur. A mon avis, une sombre combinaison d'une animation de transition qui tente de suivre le mouvement avec le passage vers un état qui n'est pas sensé utiliser ce type de suivi. Dans ces conditions, difficile de se rendre compte de l'évolution de la difficulté du niveau au fur et à mesure que la vitesse de montée de l'encre augmente O_o.
Ce qui est curieux, c'est que selon le "contrat" entre personnages et contrôleurs, il ne devrait jamais y avoir un "déficit de mouvement" tel qu'il puisse m'envoyer dans un mur ...

Everytime I end up with a character in a wall is an annoying proof that my tools are still merely hobby things. I wish so much they were cleaner than this. I have a nasty transanim-with-selfmove combination that somehow allows Bilou to enter a wall on walk/idle transition that disappears as soon as those transition animations are removed. So let's have them removed at the moment and have their return as a "todo" item.
A more curious case, now: bouncing from the ground (thus moving up under gravity, but not in "jump" state) allows Bilou to slightly enter the ceiling. If I then turn to another state, I'll end up merged with the level once for all ... And not even David Herdeg could pull him out.


  1. Bilou atterit, il a toujours une vitesse horizontale et l'animation tombe/marche est activée;
  2. le DPAD est relâché mais avec son inertie, Bilou va continuer à accumuler des déplacements-en-retard;
  3. au moment où il passe de "marche" à "arrêt", Bilou fait un pas quantique vers l'intérieur du mur;
  4. une fois bloqué dans le mur, Bilou y reste.
  5. Si je retire l'animation de transition, le problème disparaît. 
Chose plus étonnante, alors que j'essaie de corriger quelque-chose d'équivalent lors du choc avec le plafond: Bilou qui rebondit *ne cherche apparemment même pas* à ne pas rentrer dans le plafond: au moment où la transition "rebond/tomber" se produit, Bilou est *déjà* rentré dans le mur.

edit: En combinant le mode pas-à-pas d'InspectorWidget avec les breakpoints de ddd, j'ai pu pointer que la vitesse est correctement annulée par GravityController: Bilou n'entrera pas dans le mur. Mais au moment d'activer l'animation utilisée pour l'état "idle" (puisque dans le cas "encastré dans le coin", le point-test indiquant une collision avec le plafond est resté inactif), la position de Bilou est remontée de quelques pixels pour qu'il "s'aligne avec le sol dans ce nouvel état où il prend plus de place"... Haha. La bonne blague. La vraie solution, c'est la vitesse d'impact verticale qui est négative alors qu'elle serait positive dans une collision avec le sol. Une correction qui a déjà été utilisée lors de la mise au point de la gomme sauteuse.

Aucun commentaire: