Correction commentée - Trucs pour tout le mondePapy m'a envoyé sont projet, je vais faire ici une correction commentée pour souligner certains points important qui
peuvent vous bloquer ou faire que les choses ne marchent pas. Donner une "méthode" et des trucs plutot que
simplement corriger est beaucoup plus utile.
Donc papy vient de s'y mettre, il a modifié sont hercule et il vole, Bravo !
Par contre sur les animations (pas évident) ca coince, tout compile nickel mais rien, pas d'animations.
Donc je commence mon boulot de détective... Un bon programmeur n'est pas celui qui fait tout marcher du premier
coup (n'existe pas) Un bon programmeur c'est avant tout un excellent detective.
Au boulot Mr Watson.
De l'importance de l'indentationPremier coup d'oeil, le code la partie qui m'intteresse est mal indenté, ceci pose d'énorme problème de lectures.
Si il y a une erreur de "logique" dans le code il est dur de la détecter. La présentation est importante il faut la soigner.
Code mal indenté: (par exemple on a l'impression que le premier "if" ne concerne que la premiere ligne, ce genre de
fausse "impression" peu nous faire perdre des heures)

Heureusement VC++ propose des utilitaires d'indentation automatique, pas besoin de s'embeter donc. Une fois le
code tapé si il est mal indenté (ou régulièrement) tapez:
CTRL+A (selectionne tout le texte du cpp présent)
ALT+F8 (indente automatiquement le code selectionné)
Et voila, beaucoup plus clair de voir la logique, le premier "if" englobe le reste etc etc:
Comment trouver ce qui ne marche pas ?Votre code à l'air bon, mais ca ne marche pas. Pourquoi ?
La il faut de la méthode, en regardant "en vrac" et sans organisation des bouts de code on peut passer 50 fois sur
une erreur sans la voir. La méthode consiste à "remonter" le fil logique. Exemple avec une porte qui s'ouvre:
Pour ouvrir une porte il faut une main qui actionne la poignée, il faut donc une poignée, il faut que la poignée marche,
il faut des gonds , il faut que les gond marchent... vous voyez la logique ?
Sans organisation on peut passer des heures à controller en vrac toutes la mécanique de la porte alors qu'il nous
manquait simplement la main peut etre ?
Donc avec le code plus haut pour le problème d'animation de papy je cherche à un bout de la chaine, l'instruction
finale "SetAnimation" (La main) il peut y avoir plusieurs problemes:
SetAnimation (uAnim_PorteGauche , PorteGauche_proc);
1-Defaut de logique, elle n'est jamais declenchée (le "if" est faux)
2-Defaut de parametres, le "handle" est inccorrecte ou la valeur 0->1 qui fait l'animation ne change jamais ou hors
limite.
La méthode la plus évidente est de controller en débug (execution "pas a pas") , un point d'arret sur
l'instruction "SetAnimation ", on lance le programme et on regarde ce qui ce passe.
NOTE: sans debug pas à pas personne n'ira très loin, c'est vital, voir donc le tuto la dessus:
http://orbiter.dansteph.com/forum/index.php?topic=6336.msg95354#msg95354 Donc je lance, rien, SetAnimation n'est jamais appellé. Je met un point d'arret plus haut sur le "if" et la le programme
s'arrette et je vois ceci:

Horreur !, notre variable qui est sensé prendre la valeur 1 ou 0 pour passer le if contient "-842150451", aucune
chance de de declencher l'anim donc. Pourquoi quoi cette valeur ?
-Dans une classe les variables ne sont jamais initialisée par défaut ! elle prennent n'importe quel valeur. Je vais pas
rentrer dans les explications complexe mais le truc à retenir de vital !!!! c'est:
REGLE INVARIABLE: Toute variable déclarée dans votre classe ("class" dans le fichier ".h" ) doit
être initialisée avec une valeur valide dans "clbkSetClassCap()" qui est la fonction d'initialisation d'un vessel
Orbiter Donc : chaque fois qu'on rajoute une variable dans la classe (par ici si vous ne voyez pas):

On l'initialise dans clbkSetClassCap à une valeur valide pour notre programme:

Voila, c'était les "méthodes" qu'il me semblait importante de souligner. Pour le reste j'ecris à papy en PM.
A++
Dan
Message modifié ( 22-05-2008 05:44 )