Bonjour,
voilà dans un jeu de plate forme à la mario, je souhaite tester la collision entre par exemple le personnage, et un element.
J'ai fait une fonction, qui renvoit la direction de la collision.
C'est à dire, si le personnage le touche par le haut, le bas, la gauche ou la droite.
Voici cette fonction :
C'est très lourd...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141 if( Perso.getVitesse()>0 && ( ( (Perso.getX()+Perso.getW()) <= El.getX() && (Perso.getX()+Perso.getW()+Perso.getVitesse()) > El.getX() ) || ( (Perso.getX()+Perso.getW()) >= El.getX() && (Perso.getX()+Perso.getW()+Perso.getVitesse()) <= (El.getX()+El.getW()) ) || ( (Perso.getX()+Perso.getW()) < (El.getX()+El.getW()) && (Perso.getX()+Perso.getW()+Perso.getVitesse()) >= (El.getX()+El.getW()) ) ) && ( ( Perso.getY() >= El.getY() && Perso.getY() < (El.getY()+El.getH()) ) || ( Perso.getY()+Perso.getH() > El.getY() && (Perso.getY()+Perso.getH()) <= (El.getY() + El.getH()) ) || ( Perso.getY() <= El.getY() && (Perso.getY()+Perso.getH()) >= (El.getY()+El.getH()) ) ) ) { col = D_DROITE; } else if( Perso.getVitesse()<0 && ( ( Perso.getX() >= (El.getX() + El.getW()) && (Perso.getX() + Perso.getVitesse()) < (El.getX() + El.getW()) ) || ( Perso.getX() <= (El.getX() + El.getW()) && (Perso.getX()+Perso.getVitesse()) >= El.getX() ) || ( Perso.getX() > El.getX() && (Perso.getX()+Perso.getVitesse()) <= El.getX() ) ) && ( ( Perso.getY() >= El.getY() && Perso.getY() < (El.getY()+El.getH()) ) || ( Perso.getY()+Perso.getH() > El.getY() && (Perso.getY()+Perso.getH()) <= (El.getY() + El.getH()) ) || ( Perso.getY() <= El.getY() && (Perso.getY()+Perso.getH()) >= (El.getY()+El.getH()) ) ) ) { col = D_GAUCHE; } else if( Perso.getSaut()<=0 && ( ( (Perso.getY()+Perso.getH()) <= El.getY() && (Perso.getY()+Perso.getH()-Perso.getSaut()) > El.getY() ) || ( (Perso.getY()+Perso.getH()) >= El.getY() && (Perso.getY()+Perso.getH()-Perso.getSaut()) <= (El.getY()+El.getH()) ) || ( (Perso.getY()+Perso.getH()) > (El.getY()+El.getH()) && (Perso.getY()+Perso.getH()-Perso.getSaut()) <= (El.getY()+El.getH()) ) ) && ( ( Perso.getX() >= El.getX() && Perso.getX() < (El.getX()+El.getW()) ) || ( Perso.getX()+Perso.getW() > El.getX() && (Perso.getX()+Perso.getW()) <= (El.getX() + El.getW()) ) || ( Perso.getX() < El.getX() && (Perso.getX()+Perso.getW()) >= (El.getX()+El.getW()) ) ) ) { col = D_BAS; } else if( Perso.getSaut()>0 && ( ( Perso.getY() >= (El.getY() + El.getH()) && (Perso.getY()-Perso.getSaut()) < (El.getY() + El.getH()) ) || ( Perso.getY() <= (El.getY() + El.getH()) && (Perso.getY()-Perso.getSaut()) >= El.getY() ) || ( Perso.getY() > El.getY() && (Perso.getY()-Perso.getSaut()) <= El.getY() ) ) && ( ( Perso.getX() >= El.getX() && Perso.getX() < (El.getX()+El.getW()) ) || ( Perso.getX()+Perso.getW() > El.getX() && (Perso.getX()+Perso.getW()) <= (El.getX() + El.getW()) ) || ( Perso.getX() < El.getX() && (Perso.getX()+Perso.getW()) >= (El.getX()+El.getW()) ) ) ) { col = D_HAUT; } else { col = D_RIEN; }
Bon, getH(), getW(), getX(), et getY() renvoit respectiment la taille, et coordonnées des membres, comme vous l'avez surement deviné.
getVitesse(), renvoit la vitesse en pixels du personnage à laquelle il se déplace. ( >0, il court sur la droite, <0, il court sur la gauche )
getSaut(), renvoit la valeur du saut en pixels ( >0, il descend, <0 il monte ).
Cette fonction a toujours fonctionné correctement jusqu'à aujourd'hui, où maintenant, dès que je veux me deplacer sur la gauche sur un element, le test de collision devrait seulement me renvoyer D_HAUT, mais renvoit aussi D_GAUCHE maintenant, alors qu'il devrait pas.
De toute facon, je trouve cet algorithme assez lourd, et j'aimerai avoir le meme algorithme efficace, et n'ayant pas besoin de se servir de getSaut(), getVitesse().
Donc ma question est, auriez vous dans vos sources, cet algorithme que je cherche tant?
Qui me permet de detecter s'il y a collision, et dans quelle direction, de deux surface ( x, y, w, h ).
Partager