Timer dans un switch

Signaler
Messages postés
4
Date d'inscription
mercredi 1 avril 2009
Statut
Membre
Dernière intervention
23 septembre 2009
-
Messages postés
4933
Date d'inscription
samedi 1 juillet 2006
Statut
Membre
Dernière intervention
2 février 2015
-
Bonjour à tous,
Je suis débutant en javascript.
J'ai un souci avec la syntaxe de mon switch.
En fait dans mon code je veux lancer une animation,attendre n secondes,lancer une autre animation,etc ...
J'ai une version de ce code qui fonctionne

function playAnimation(etape)
{
switch(etape)
{
case 1:
TNTDoCommand('Objects(obj1).PlayAnimation(0,25)');
setTimeout("playAnimation(2)",1000);
break;
case 2:
TNTDoCommand('Objects(obj2).PlayAnimation(0,25)');
setTimeout("playAnimation(3)",1000);
break;
case 3:
TNTDoCommand('Objects(obj3).PlayAnimation(0,25)');
setTimeout("playAnimation(4)",1000);
break;
case 4:
TNTDoCommand('Objects(obj4).PlayAnimation(0,25)');
setTimeout("playAnimation(5)",1000);
break;
case 5:
TNTDoCommand('Objects(obj5).PlayAnimation(0,25)');
setTimeout("playAnimation(6)",1000);
break;
case 6:
TNTDoCommand('Objects(obj6).PlayAnimation(0,25)');
setTimeout("playAnimation(7)",1000);
break;
case 7:
TNTDoCommand('Objects(obj7).PlayAnimation(0,25)');
setTimeout("playAnimation(8)",1000);
break;
case 8:
TNTDoCommand('Objects(obj8).PlayAnimation(0,25)');
setTimeout("playAnimation(9)",1000);
break;
case 9:
TNTDoCommand('Objects(obj9).PlayAnimation(0,25)');
setTimeout("playAnimation(10)",1000);
break;
case 10:
TNTDoCommand('Objects(obj10).PlayAnimation(0,25)');
break;
}
/*element('PlayButton').value = "Play Backward";*/
}


Seulement j'ai essayer d'automatiser les choses en faisant une boucle for.Mais la ça ne fonctionne plus.

function playAnimation(etape)
{
switch(etape)
{
for(var i=1; i<11; i++){
case parseInt(i):
TNTDoCommand('Objects(obj'+i+').PlayAnimation(0,25)');
flex = parseInt(i)+1;
setTimeout("playAnimation("+parseInt(flex)+")",1000);
break;
}
}
element('PlayButton').value = "Play Backward";
}


Si quelqu'un peut m'aider,merci d'avance.

7 réponses

Messages postés
4933
Date d'inscription
samedi 1 juillet 2006
Statut
Membre
Dernière intervention
2 février 2015
9
Bonjour,
for ( var etape=1; etape<11; etape++ )
{ TNTDoCommand('Objects(obj'+etape+').PlayAnimation(0,25)');
setTimeout( function() { playAnimation(etape+1); }, 1000 );
}

peut-être ???

mais attention setTimeout ça veut bien dire :
lancer la fonction dans le délai donné et
continuer immédiatement à l'instruction suivante

Cordialement [mon Site] [M'écrire] Bul
Messages postés
4
Date d'inscription
mercredi 1 avril 2009
Statut
Membre
Dernière intervention
23 septembre 2009

ça marche pas :)
Et dans ton code,j'ai plus mon "case".
Messages postés
4
Date d'inscription
mercredi 1 avril 2009
Statut
Membre
Dernière intervention
23 septembre 2009

En fait,dans ie l'erreur qu'il m'affiche est la suivante :
'}' attendu ligne 150

La ligne 150 correspond au for
Messages postés
4933
Date d'inscription
samedi 1 juillet 2006
Statut
Membre
Dernière intervention
2 février 2015
9
>>ça marche pas
ah !!!! ça aide pour répondre ça !!!!!
et ???? qu'est-ce qui ne marche pas ????
vous avez un message d'erreur ? vous avez debuggé ?

>>j'ai plus mon "case".
ben oui ! puisqu'il devient inutile !
je pensais même que c'était le but recherché ???

et : si, mon exemple doit fonctionner, sauf si
vous aviez des erreurs dans votre script
originel, qu'on ne peut pas tester, puisque
nous n'avons pas toutes les fonctions nécessaires !


mais peut-être n'avez vous pas appliqué "tel quel",
ni probablement lu ce que je disais ? je répète :
[i]attention setTimeout ça veut bien dire :
lancer la fonction dans le délai donné et
continuer immédiatement à l'instruction suivante
/i
Messages postés
4933
Date d'inscription
samedi 1 juillet 2006
Statut
Membre
Dernière intervention
2 février 2015
9
En fait,dans ie l'erreur qu'il m'affiche est la suivante :
'}' attendu ligne 150. La ligne 150 correspond au for
donc votre erreur est avant !
Messages postés
4
Date d'inscription
mercredi 1 avril 2009
Statut
Membre
Dernière intervention
23 septembre 2009

ok merci pour tes réponses.En fait a priori quand je lance un switch il lui faut un "case" juste derrière sinon il ne comprend pas.Du coup cela donne quelque chose dans ce gout la :
function playAnimation(etape)
{
switch(etape)
{
case 1:for ( var etape=1; etape<11; etape++ )
{ TNTDoCommand('Objects(obj'+etape+').PlayAnimation(0,25)');
setTimeout( function() { playAnimation(etape+1); }, 1000 );
} 
}
element('PlayButton').value = "Play Backward";
}
function makeAnimationButton()
{
frameCount = TNTDoCommand('SceneGraph.GetFrameCount()');
if(frameCount > 1)
{	
element('AnimationCell').innerHTML +='';
}
}

Je t'ai rajouter la fonction qui fait appelle à playAnimation().
Et donc la je n'ai plus d'erreur,seulement mes anim se lance toutes en même temps.
Désolé si je ne poste pas tout comme il faut,c'est ma première fois :)
Messages postés
4933
Date d'inscription
samedi 1 juillet 2006
Statut
Membre
Dernière intervention
2 février 2015
9
votre switch/case est inutile... non ?

>>les anim se lance toutes en même temps
pas "tout à fait", mais quasi oui.
je répète en redisant autrement :
setTimeout lance la fonction dans le délai donné et
continue, donc relance la fonction, puis continue...
et ainsi de suite...

il faut faire les choses autrement.

par exemple :

lancer l'animation
qui se relancera elle même avec setTimeout
et ce tant qu'on est pas au bout des animations.