Tester si un objet existe avant de faire un hitTest

Résolu
Wally57 Messages postés 71 Date d'inscription mercredi 4 juin 2003 Statut Membre Dernière intervention 12 juillet 2006 - 31 oct. 2005 à 16:01
cs_goldenboy68 Messages postés 1596 Date d'inscription samedi 3 janvier 2004 Statut Membre Dernière intervention 9 juin 2011 - 1 nov. 2005 à 18:34
Voila mon problème :

Je commence a créé un jeu où le but est de faire des protections pour
un chateau et apres une attaque, qu'il soit toujours debout (en gros) ,
avec une vue du dessus.

J'ai déjà fait le code pour poser des murs et des tours, et la creations de "l'armée".

L'armée est en fait juste des clips qui descendent l'ecran tant qu'ils ne touchent pas de murs ou de tours.

Donc, le code consiste a tester une collision de chaque mechants avec
un mur ou une tour, et si il y a collision, l'énergie du batiement
descend jusqu'a arriver a 0 et etre suprimé.

Donc j'ai fait des boucles pour limiter le nombre de tester au nombre de mechants crées et au nombre de tours et de murs.

Mais lorsqu'il y a beaucoup de murs, de tours et de mechants, ca rame a mort (5 ou 6 fps...) !



Parce que s'il y a 20 murs, 20 tours et 50 mechants, il faut tester
pour chaque mechant si il y a collision avec les 20 murs et avec les 20
tours, meme si certaine d'elles ont étaient détruites...

En plus, autour des tours il y a une zone et faut aussi tester si un mechant est dans la zone pour lui "tirer" dessus...



Je sait pas si c'est tres claire... mais ca l'ai surement plus que le
code, vu qu'il fait 130 lignes et qu'il est assez bordelique !



Alors j'aimerai savoir s'il existe une methode pour tester la collision
que avec les tours, murs et mechants qui ne sont pas encore détruits.


Wally57

3 réponses

cs_goldenboy68 Messages postés 1596 Date d'inscription samedi 3 janvier 2004 Statut Membre Dernière intervention 9 juin 2011 2
1 nov. 2005 à 18:34
Ben en fait, ma méthode est meilleure (disons qu'elle est meilleure car
je faisais comme toi avant et que j'ai lu dans un bouquin celle que je
t'ai donné...et quand on voit le fonctionnement, on se dit: "mais
pourtant j'y ai pas pensé!")



Donc en fait "conteneurTours" serait un clip où tu mettrais toutes tes
tours, comme ça pour tous les ennemis, tu testes d'abord s'il y a
collision avec le conteneur (au lieu de faire le test sur toutes les
tours...si y'a pas collision, ça te fait un paquet de tests en
moins...multiplié par le nombre d'ennemis...et rebelotte pour les
murs...) et ensuite si le test est positif, tu fais le test sur tous
les éléments de "conteneurTours" donc chaque "Tour" et pareil...faut
sortir de la boucle "for(elt ..." dès que t'as un test positif!
Histoire d'accélérer encore un peu les tests!



Voilà...idem pour les murs que je mettrais dans un "conteneurMurs". En espérant que ça se clarifie pour toi!



@+! Samy
3
cs_goldenboy68 Messages postés 1596 Date d'inscription samedi 3 janvier 2004 Statut Membre Dernière intervention 9 juin 2011 2
1 nov. 2005 à 13:17
quand ils sont détruits, tu fais un removeMovieClip...enfin j'espère! lol



Ensuite pour parcourir les clips, tu fais un:



for(elt in conteneurTours){

trace(conteneurTours[elt]._name);

// Faire le test hitTest

}



@+! Samy



PS: pour limiter les tests, tu peux faire un hitTest sur
"conteneurTours", s'il est positif, tu fais un hitTest sur les éléments
de conteneurTours...ça limite pas mal les tests!!
0
Wally57 Messages postés 71 Date d'inscription mercredi 4 juin 2003 Statut Membre Dernière intervention 12 juillet 2006
1 nov. 2005 à 17:24
Merci de m'avoir répondu mais j'ai pas trop compris...

C'est quoi ce conteneurTours ?


Et sinon entre temps j'ai trouver un truc :

je fait un

if (this["mechant"+a]._x !== undefined) {

là je fait bouger le mechant et apres je fait un

if (this["mur"+z]._x !== undefined) {

je teste la collision avec le mur et enfin un

if (this["tour"+z]._x !== undefined) {

je teste avec la tour

et là, quand il n'y a pas beaucoup de mechant a l'ecran, ni trop de murs et de tours, ca ne rame plus !

Mais je ne sais pas si c'est la methode la plus efficace...


Wally57
0
Rejoignez-nous