[Edit] Le lag que j'ai rencontré n'es pas du a mon probleme de recherche de colision mais plutot a l'affichage lui meme, voir plus bas pour détails[/Edit]
Salut à tous et merci de votre attention !
Voilà je suis en train de coder un petit jeu 2D du style space invaders et j'aimerais ameliorer mon algo de detection de colision entre les "Tirs" de mon vaisseau et les differents "Hostiles" se balandant dans l'espace.
Le probleme est que lorsque j'ai 60 Tirs et 20 Hostiles le jeu lag enormement...
Quelqu'un sait comment alleger tout ca ?
De plus avec ma methode je ne test, que si le centre de l'hostile est dans le rectangle correspondant a l'image du tirs, je preffererais savoir si les deux rectangles sont en colision.
Pour chaque Objet, que ce soit un "Tir" ou un "Hostile" je peux récuperer :
vx - vitesse en x
vy - vitesse en y
width - largeur en x de l'image represantant l'objet
height - largeur en y de l'image represantant l'objet
p - le point des coordonnée centrées de l'objet (en effet le centre de l'image correspond a ce point donc pour la dessiné ca donne drawImage(image, p.getX()-width/2, p.getY()-height-2,null)
Voilà a peu près le code (en simplifié mais la structure est la même)
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 private void checkTirWithHostiles () { Tir t; Hostile m; for (int i = 0; i<this.hostiles.size(); i++) { m = (Hostile) this.hostiles.get(i); for (int j = 0; j<this.tirs.size(); j++) { t = (Tir) this.tirs.get(j); if (m.getPoint().getX()>t.getMinX() && m.getPoint().getX()<t.getMaxX()+t.getVx() && m.getPoint().getY()>t.getMinY() && m.getPoint().getY()<t.getMaxY()+t.getVy()) { //Je fais ce qu'il y a a faire en cas de collision } } } }
Edit : je viens d'avoir l'idée d'utiliser la classe Rectangle et la methode contains pour voir si le point est dedans... on vera. Mais n'hsitez pas a poster vos conseils ! Merci
Partager