[flash8 AS2] pb de boucles if imbriquees
Bonjour !
je cherche a programmer une animation simulant une course de voitures (pour pouvoir l'utiliser en strategie de course durant une vraie course).
je cherche donc a faire tourner mes 4 voitures, blue, green, purple et brown a des vitesses differentes, dependant de leur chrono reel au tour : mission accomplie.
mais je cherche aussi a les faire rester derriere la Safety Car quand celle ci sort (puisqu'interdiction de doubler durant une SC)
j'ai donc fait un truc bien bourrin (car je ne savais pas faire autrement ) ou j'ai plusieurs boucles if imbriquees, genre si la voiture blue touche la SC alors, ... et si la voiture verte touche la voiture bleue qui touche deja la SC alors, ...
mais le probleme c'est que ca ne marche pas et ca marche pas de facon bizarre...
Si la bleue touche la SC en 1ere, pas de probleme, mais par exemple qd la verte touche la blue deja derriere la SC, la vitesse de la verte ne change pas, alors que flash effectue bien la boucle if concernee car un trace place dans cette boucle est effectue...
enfin voila, je ne sais pas si je suis tres claire... j'espere qd meme !
voici donc mon code si quelqu'un a une solution, je suis preneuse
Code:
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
| var tb:Number = 0;
var tg:Number = 0;
var tp:Number = 0;
var tbr:Number = 0;
var tSC:Number = 0;
var bluerotation:Number = 0;
var greenrotation:Number = 0;
var brownrotation:Number = 0;
var purplerotation:Number = 0;
var SafetyCar:Boolean = false;
var BlueHitSC:Boolean = false;
var GreenHitSC:Boolean = false;
var PurpleHitSC:Boolean = false;
var BrownHitSC:Boolean = false;
//
onEnterFrame = function () {
if (tbs.text!="", tbm.text!="", tbms.text!="") {
tb = parseFloat(tbs.text)+(parseFloat(tbm.text))*60+(parseFloat(tbms.text))/1000;
}
if (tgs.text!="", tgm.text!="", tgms.text!="") {
tg = parseFloat(tgs.text)+(parseFloat(tgm.text))*60+(parseFloat(tgms.text))/1000;
}
if (tbrs.text!="", tbrm.text!="", tbrms.text!="") {
tbr = parseFloat(tbrs.text)+(parseFloat(tbrm.text))*60+(parseFloat(tbrms.text))/1000;
}
if (tps.text!="", tpm.text!="", tpms.text!="") {
tp = parseFloat(tps.text)+(parseFloat(tpm.text))*60+(parseFloat(tpms.text))/1000;
}
bluerotation = 360/tb;
greenrotation = 360/tg;
brownrotation = 360/tbr;
purplerotation = 360/tp;
SCrotation = 360/tSC;
if (SafetyCar == false) {
blue._rotation += bluerotation;
green._rotation += greenrotation;
purple._rotation += purplerotation;
brown._rotation += brownrotation;
}
if (tSCs.text!="", tSCm.text!="", tSCms.text!="") {
tSC = parseFloat(tSCs.text)+(parseFloat(tSCm.text))*60+(parseFloat(tSCms.text))/1000;
safety._rotation += SCrotation;
}
if (SafetyCar == true) {
if (GreenHitSC == false and PurpleHitSC == false and BrownHitSC == false) {
if (safety.hitTest(blue)) { //boucle effectuee correctement
BlueHitSC = true;
blue._rotation += SCrotation;
green._rotation += greenrotation;
purple._rotation += purplerotation;
brown._rotation += brownrotation;
if (blue.hitTest(green)) { //boucle effectuee bizarrement car boucle effectuee mais changement de vitesse non effectif...
green._rotation += SCrotation;
purple._rotation += purplerotation;
brown._rotation += brownrotation; if (green.hitTest(purple)) {
purple._rotation += SCrotation;
brown._rotation += brownrotation;
if (purple.hitTest(brown)) {
brown._rotation += SCrotation;
}
}
if (green.hitTest(brown)) {
brown._rotation += SCrotation;
purple._rotation += purplerotation;
if (brown.hitTest(purple)) {
purple._rotation += SCrotation;
}
}
}
if (blue.hitTest(purple)) {
purple._rotation += SCrotation;
green._rotation += greenrotation;
brown._rotation += brownrotation;
if (purple.hitTest(green)) {
green._rotation += SCrotation;
brown._rotation += brownrotation;
if (green.hitTest(brown)) {
brown._rotation += SCrotation;
}
}
if (purple.hitTest(brown)) {
brown._rotation += SCrotation;
green._rotation += greenrotation;
if (brown.hitTest(green)) {
green._rotation += SCrotation;
}
}
}
if (blue.hitTest(brown)) {
brown._rotation += SCrotation;
green._rotation += greenrotation;
purple._rotation += purplerotation;
if (brown.hitTest(purple)) {
purple._rotation += SCrotation;
green._rotation += greenrotation;
if (purple.hitTest(green)) {
green._rotation += SCrotation;
}
}
if (brown.hitTest(green)) {
green._rotation += SCrotation;
purple._rotation += purplerotation;
if (green.hitTest(purple)) {
purple._rotation += SCrotation;
}
}
}
} else {
blue._rotation += bluerotation;
}
}
if (BlueHitSC == false and PurpleHitSC == false and BrownHitSC == false) {
if (safety.hitTest(green)) {
GreenHitSC = true;
green._rotation += SCrotation;
} else {
green._rotation += greenrotation;
}
}
if (GreenHitSC == false and BlueHitSC == false and BrownHitSC == false) {
if (safety.hitTest(purple)) {
PurpleHitSC = true;
purple._rotation += SCrotation;
} else {
purple._rotation += purplerotation;
}
}
if (GreenHitSC == false and PurpleHitSC == false and BlueHitSC == false) {
if (safety.hitTest(brown)) {
BrownHitSC = true;
brown._rotation += SCrotation;
} else {
brown._rotation += brownrotation;
}
}
}
}; |
je precise que je n'ai prevue que les cas pour lesquels blue touche la SC en 1ere, si ca ca marche, le reste sera facile a faire apres normalement.
Merci bcp d'avance pour vos reponses !!!
P.S.: excusez moi pour les accents, je suis en GB actuellement et les claviers qwerty connaissent pas les accents... :?