Deeph (./30) :
Comme souvent ce n'est pas bien compliqué... une fois qu'on a compris
> T*(1-pxl-test(62-(W+2DW+DX*A),X+2DX+DW*A))->T
Faut déjà connaitre chaque fonctions et chaques valeurs des variables, etc... 'fin bon, après c'est peut être plus rapide.
-La bricole (inutile ?) avec le T, ça peut façilement se comprendre: au début il vaut 1, le '1', c'est la valeur 'y'a pas collision':
.si pxl-test renvoie 0 (donc résultat négatif), on fait (1-0)*1->t, donc il reste à 1
.si pxl-test renvoie 1 ( collision ! ), on fait 1*(1-1)->t, donc il vaut 0 à ce moment là, et comme on fait à chaque fois (1+truc)*t->t, si t vaut 0 à une étape, il restera toujours nul.. ( machin*0 = 0
)
Si il y a collision, on annule les 'déplacement' (on 'remplace' DX par DX*0, idem pour DW), sinon, on fait rien (puisque *1 )
-Le 2*DW et 2*DX, ça se comprend bien aussi: tu teste deux cases 'en avant' de ton sens de déplacement. (et ça me gène pas de mettre chacun de son coté, car quand l'un est non-nul, l'autre est nul. ). regarde dans chacun des tests que t'avais au début, ça correspond exactement à ça
-Le Dx*A et DW*A, c'est du bricolage opportuniste: regarde sur ton shéma, pour vérifier la collision, tu te place 2 cas en avant du sens de déplacement, et 'défile' les case de l'autre direction (si tu te déplace vers le haut, tu va regarder trois cases alignés horizontalement). C'est pour ça que les expression soit 'croisés' (et que je l'ai mal écrit au début..). Donc si DX fait +/-1, tu va bien faire défiler les Y. De plus, que ça fasse 1 ou -1, tu t'en fout, car (DX*A) va soit valoir -1,0,1 soit 1,0,-1.. ça prend le même valeur, et l'ordre on s'en fout..( tant qu'il est conservé le long de la boucle..)
En gros, on ruse sur le fait que ça vaille 0 ou +-1 pour annuler/valider le déplacement dans un sens, et on joue sur la symétrie de la boucle pour simplifier encore...
je sais pas si t'a tout suivi... n'hésite pas à formuler des questions si tu veux..