8Fermer10
veryLe 29/01/2007 à 08:37
Tu veux tester la colision que pour le point ? ( en utilisant le 'carré de sécurité' ) ou tu veux éviter la collision de tout le carré ?

Sinon, si ton point est en (X,W):
-Tu devrais pas tester de X-1 à X+1 si la position du point est X ?
-De même, logiquement tu devrait aller de W-1 à W+1..


Sinon tu peux te dispenser des Then/else sur les pxltests

Bref, si j'ai bien compris j'aurais plutôt qqch comme ça:
0->Ymin:0->Xmin:62->Ymax:94->Xmax
AxesOff:GridOff
ClrHome
31->W:48->X
Lbl 1
While 1
Pt-On(X,W,2
Repeat K
getKey->K
End
If K=25:Then
For(A,X-1,X+1
If pxl-Test(A,W-1)=1:Goto 1
Pt-Off(X,W,2:W+1->W
End
End
If K=34:Then
For(A,X-1,X+1
If pxl-Test(A,W+1)=1:Goto 1
Pt-Off(X,W,2:W-1->W
End
End
If K=24:Then
For(A,W-1,W+1
If pxl-Test(A,X-1)=1:Goto 1
Pt-Off(X,W,2:X-1->X
End
End
If K=26:Then
For(A,W-1,W+2
If pxl-Test(A,X+1)=1:Goto 1
Pt-Off(X,W,2:X+1->X
End
End End

(qui se factorise par ailleurs assez bien)
Mais de toute manière y'a toujours un truc qui me semble douteux: là tu test également les 'coins' du carré, ce qui me parait pas vraiment nécessaires si c'est seulement pour gérer les collisions de ton point (et même très génant: si tu colle un bord, par exemple en étant monté verticalement....ça va t'empécher de te déplacer latéralement ensuite ...)

Moi, j'aurais fait tout simplement un truc du genre:

debut_boucle
Pt-On(X,Y)
+/-1 -> delta_x // correspond à gauche/droite: getkey.. if = gauche :1->delta_x / etc...
+/-1 -> delta y // idem en verticale
If Pxl-test(X+delta_x,y+delta_y):Goto 1 // je te laisse faire l'inversion qu'il faut je crois..
Pt-Off(x,y)
X+delta_x->X
Y+delta_y -> Y
fin_boucle

Y'a autre-chose qui me parait douteux: la différence entre Pxl-instruction et Pt-instruction
Je ne m'en souviens plus de tête, mais si c'est bien ce que je pense ( genre en pxl ça commence en haut à gauche ? ), il faut faire plus que d'inverser les W+1 en W-1.. pour ce qui est des coordonnées verticales (ce sont elles qui posent pb je crois..), il faut faire qqch du genre (64-Y) pour passer de pt à pxl.. (d'ailleurs, je conseils - sauf exception- toujours de travailler le maximum en pxl et le minimum en point )