J'essaie de me faire une méthode pour la détection de collision dans mon jeu et je vois quelques petits problèmes. Ma méthode fonctionnent parfaitement mais je vois 2 'failles' et j'aimerais avoir quelques suggestions.
Premièrement, si je veux faire déplacé le personnage sur une pente, je vais avoir plusieurs problèmes avec cette méthode car je devrait ajouter un rect pour les jambes et déplacer le y du perso en conséquence lorsque le y de l'ostacle (de ce cas la pente) diviser par la vitesse est plus petit ou égale a 1.
Deuxièmement, dans mon stage de debug avec quelques enemis et quelques plates-formes, le taux de FPS est très haut, mais dans un stage avec un sol a plusieur niveau, plusieurs plate-formes et plusieurs enemis qui doivent aussi intéragir avec ses obstacles, le taux de FPS en serait vraiment affecté, surtout sur un ordinateur moin performant.
Un troisième pourrait être le fait que si le joueur va trop vite, il pourrait passé en travers d'un mur, mais vu qu'il est impossible pour le joueurs d'allé si vite et que je n'ai aucun murs de 1 pixels, se problème ne me concerne pas vraiment.
Cette méthode est utilisé seulement pour les contacts des objects avec les obstacles contre les murs, les plate-formes ou le sol, j'utilise une méthode différence pour la détection des balles, vu qu'elles intéragisse différament dans le contexte de mon jeu.
Tout mes obstacles sont inclus dans le tableau de blocs. La valeur de retour consiste au x (ou y) ou le perso doit arreter pour ne pas être dans le mur. Donc si le mur est a 10, le perso a 6 et la vitesse est de 5, la méthode retourne 10. Si elle retourne -1, tout se passe bien, évidament. J'utilisais un case avant, mais je l'ai changé car j'ai eu un problème qui n'était pas lié à ça du tout finalement.
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 // dir : 1 = up, 2 = left, 3 = right, 4 = down int collision(int mX, int mY, int mH, int mW, int speed, int dir){ for (int i = 0; i < 4; i++){ if(dir == 1){ if( mX + mW > blocs[ i ].x && mX < blocs[ i ].x + blocs[ i ].w ){ if( mY + speed < blocs[ i ].y + blocs[ i ].h && mY + mH + speed > blocs[ i ].y ){ return blocs[ i ].y + blocs[ i ].h; } } } else if(dir == 2){ if( mY + mH > blocs[ i ].y && mY < blocs[ i ].y + blocs[ i ].h ){ if( mX + speed < blocs[ i ].x + blocs[ i ].w && mX + mW + speed > blocs[ i ].x ){ return blocs[ i ].x + blocs[ i ].w; } } } else if(dir == 3){ if( mY + mH > blocs[ i ].y && mY < blocs[ i ].y + blocs[ i ].h ){ if( mX + speed < blocs[ i ].x + blocs[ i ].w && mX + mW + speed > blocs[ i ].x ){ return blocs[ i ].x - mW; } } } else if(dir == 4){ if( mX + mW > blocs[ i ].x && mX < blocs[ i ].x + blocs[ i ].w ){ if( mY + speed < blocs[ i ].y + blocs[ i ].h && mY + mH + speed > blocs[ i ].y ){ return blocs[ i ].y - mH; } } } } return -1; }
Quels que conseils seraient appréciés.
Partager