Un for dans mon while..

cs_louissi Messages postés 5 Date d'inscription vendredi 23 janvier 2004 Statut Membre Dernière intervention 25 août 2004 - 25 août 2004 à 07:29
cs_louissi Messages postés 5 Date d'inscription vendredi 23 janvier 2004 Statut Membre Dernière intervention 25 août 2004 - 25 août 2004 à 21:11
Salut! J'aimerais que vous jetiez un oeuil a mon code:
(code de la balle(px et py sont défini avant, cer pas sa le prob):
while (sit == 0)
{
_x += px;
_y += py;
if (_x > 550 or _x < 0 or _y > 400 or _y < 0)
{
sit = 1;
}
for (i = _root.monstercreator.izombie; i >= 100; i -= 1)
{
if (eval ("_root.zombie" + i).hitTest (this._x, this._y, true))
{
eval ("_root.zombie" + i).zombiein.gotoAndStop ("die");
sit = 1;
}
else if (_root.zombie.hitTest (this._x, this._y, true))
{
_root.zombie.zombiein.gotoAndStop ("die");
sit = 1;
}
}
}
if (sit == 1)
{
_visible = false;
}

Mon probleme est que j'ai un for and un while... le prob cer que c'est la seule facon que je conaisse pour vérifier la collision entre ma balle et un zombie qui a été dupliqué, ayant un nom du genre: "zombie1 , zombie2, zombie3, etc.."

Quelqun a une facon pour que ca arete de lager ou tout simplement une autre façon de véifier les collisions?

4 réponses

CyberP Messages postés 283 Date d'inscription mercredi 8 janvier 2003 Statut Membre Dernière intervention 4 juillet 2007 2
25 août 2004 à 09:29
Ca ne rame pas à cause du test de la collision, mais parce que ca tourne en boucle

Essayes ca :

function Collision() {
if (sit == 0)
{
_x += px;
_y += py;
if (_x > 550 or _x < 0 or _y > 400 or _y < 0)
{
sit = 1;
}
for (i = _root.monstercreator.izombie; i >= 100; i -= 1)
{
if (eval ("_root.zombie" + i).hitTest (this._x, this._y, true))
{
eval ("_root.zombie" + i).zombiein.gotoAndStop ("die");
sit = 1;
}
else if (_root.zombie.hitTest (this._x, this._y, true))
{
_root.zombie.zombiein.gotoAndStop ("die");
sit = 1;
}
}
}
else if (sit == 1)
{
_visible = false;
}
}
setInterval("Collision", 1);

CyberP,
Celui qui dit que toute question a une réponse
0
cs_louissi Messages postés 5 Date d'inscription vendredi 23 janvier 2004 Statut Membre Dernière intervention 25 août 2004
25 août 2004 à 09:36
ca marche pas :(
faut savoir aussi que la frame qui contien le code joue 40fois par seconde..
frame1: les valeurs initiales, celles qui sont établies au debut comme px et py

frame2: le code que tu vois

frame3: gotoAndPlay(2); <-- renvoi a frame 2
0
cs_adv Messages postés 149 Date d'inscription vendredi 30 mai 2003 Statut Membre Dernière intervention 28 janvier 2011 2
25 août 2004 à 11:29
Je pense que c'est simplement la limite possible pour flash avec ce code. 40 img /sec avec le nombre d'itération qu'il y a dans la boucle, je pense que c'est normal que ça ne suive pas.
Il faudrait essayer avec une autre approche. Ce serait peut-être préférable que ce soit les zombies qui chacun pour soit contrôle qu'ils ne sont pas en colision avec l'objet. Ainsi, plus de while, plus de for et un code plus propre.
A essayer
0
cs_louissi Messages postés 5 Date d'inscription vendredi 23 janvier 2004 Statut Membre Dernière intervention 25 août 2004
25 août 2004 à 21:11
le problème c'est que je veut que ma balle avance a la vitesse de la lumiere, et la seule facon de le faire cer d'utiliser un while. Si j'ogmentais la distance qu'elle parcoure a chaque frame, le prob cer que parfois elle passe a travers les objets. Donc je suis obligé d'utiliser un while. Mais le problème ce n'est pas le while, mais bien le fait que je doive vérifier le nom de chaque zombie... Je ne peut pas mettre les teste de collision dans le zombie, car la balle parcoure logiquement tout le tableau en une frame, donc les zombie de détectent pas la collision (j'ai esseyé). Ma seule facon de m'en sortir, c'est de trouver une commande qui veut dire: "nimporte quel nombre". Comme un 2 "frimé" quand on jou au carte... une commande qui égalerait tout les nombres a la fois. Ne me sortez pas le random();, cer pas de ca que je parle... ca cer n'importe quel nombre au hazard...

Pour résumer, je dois me débarasser du "for" dans mon code.
0
Rejoignez-nous