Aller au contenu


Temporisation


  • Vous ne pouvez pas répondre à ce sujet
6 réponses à ce sujet

#1 olihya

    Ceinture Jaune

  • Members
  • 28 messages

Posté 21 août 2009 - 03:52

Bonjour à vous,
Comment est-il possible de faire attendre 2 secondes avant la prochaine commande?
J'aimerai qu'il s'écoule 2 secondes avant que s'exécute les "go to the frame" 25 et 23.

Voici mon code:

Lingo



if dist2<20 then
explose (me)
sound(1).stop()
if value (field"champScore")> value (field "score5") then
sound(1).stop()
put value (field "champScore") into field "scoreObt"
put "" into field "nomJoueur"

go to frame 25
else
go to frame 23

end if
end if
end
Connaissez-vous l'astuce? icon_question.gif
Bonne journée.

#2 olihya

    Ceinture Jaune

  • Members
  • 28 messages

Posté 22 août 2009 - 08:19

Citation (olihya @ Aug 21 2009, 04:52 PM)
Bonjour à vous,
Comment est-il possible de faire attendre 2 secondes avant la prochaine commande?
J'aimerai qu'il s'écoule 2 secondes avant que s'exécute les "go to the frame" 25 et 23.

Voici mon code:

Lingo



if dist2<20 then
explose (me)
sound(1).stop()
if value (field"champScore")> value (field "score5") then
sound(1).stop()
put value (field "champScore") into field "scoreObt"
put "" into field "nomJoueur"

go to frame 25
else
go to frame 23

end if
end if
end
Connaissez-vous l'astuce? icon_question.gif
Bonne journée.


Bonjour à vous
Voici la réponse apportée par notre cher Glurp, gourou.gif
Citation
Salut,

Tu as deux possibilités ;

- Soit tu crées un compteur qui s'inscrémente (si tu as 25 i/s, compte 40 millisecondes par frame, donc pour deux seconde d'attente tu incrémentes jusqu'à 50)
- Soit tu utilises un "objet de temporisation", càd un timeout qui, au bout de 2000 millisecondes, appelle une fonction contenant ton dernier "if"


Lingo


on enterFrame me

if dist2<20 then
member("Scene").model("boite1").translate(0,0,10)
posVais = member("Scene").model("boite1").worldPosition
t1 = posVais.x
t2 = posVais.y
t3 = posVais.z-20

Member("Scene").model("explo").transform.position = vector(t1,t2,t3)
sound(1).stop()

new timeout("monTimeOut", 2000, #goToScore, me)

end if

end

on goToScore me

if value (field"champScore")> value (field "score5") then
put value (field "champScore") into field "scoreObt"
put "" into field "nomJoueur"
go to frame 25
else
go to frame 23
end if

timeout("monTimeOut").forget

end


Merci à toi Glurp;-)

#3 glurp

    Modérateur

  • Moderateur
  • 1 249 messages

Posté 22 août 2009 - 09:53

Juste une petite info supplémentaire parce que ça me crève les yeux ; il manque des () à timeout("monTimeOut").forget() icon_wink.gif

#4 olihya

    Ceinture Jaune

  • Members
  • 28 messages

Posté 28 août 2009 - 10:02

Citation (glurp @ Aug 22 2009, 10:53 AM)
Juste une petite info supplémentaire parce que ça me crève les yeux ; il manque des () à timeout("monTimeOut").forget() icon_wink.gif

Bonjour à vous, icon_smile.gif
Voilà je tourne le code de Glurp dans tout les sens mais impossible d'aller sur le goToScore.
Au moment de la collision, l'explosion (qui s'exécute dans un endroit invisible) viens ce placer à l'endroit de l'impact, le son s'arrête.
Mais l'explosion se répète sans cesse et cela ne passe pas sur le goToScore.
On dirait que le timeout ne se peux se lancer.
Mystère ???
De quoi cela peut-il venir icon_question.gif
Est-ce qu'il existe une autre méthode permettant d'obtenir l'effet voulu icon_question.gif



#5 glurp

    Modérateur

  • Moderateur
  • 1 249 messages

Posté 29 août 2009 - 10:15

Euh, oui, en effet, tu dois aussi vérifier dans ton enterframe que le timeout n'a pas déjà été créé (sinon il relance l'explosion et réinitialise le timeout à chaque boucle).

Lingo


on enterFrame me

if (the timeoutList).getOne("monTimeOut") = 0 then -- Par exemple --

if dist2<20 then
member("Scene").model("boite1").translate(0,0,10)
posVais = member("Scene").model("boite1").worldPosition
t1 = posVais.x
t2 = posVais.y
t3 = posVais.z-20

Member("Scene").model("explo").transform.position = vector(t1,t2,t3)
sound(1).stop()

new timeout("monTimeOut", 2000, #goToScore, me)

end if

end if

end


#6 olihya

    Ceinture Jaune

  • Members
  • 28 messages

Posté 30 août 2009 - 10:19

Citation (glurp @ Aug 29 2009, 11:15 AM)
Euh, oui, en effet, tu dois aussi vérifier dans ton enterframe que le timeout n'a pas déjà été créé (sinon il relance l'explosion et réinitialise le timeout à chaque boucle).

Lingo


on enterFrame me

if (the timeoutList).getOne("monTimeOut") = 0 then -- Par exemple --

if dist2<20 then
member("Scene").model("boite1").translate(0,0,10)
posVais = member("Scene").model("boite1").worldPosition
t1 = posVais.x
t2 = posVais.y
t3 = posVais.z-20

Member("Scene").model("explo").transform.position = vector(t1,t2,t3)
sound(1).stop()

new timeout("monTimeOut", 2000, #goToScore, me)

end if

end if

end

Bonjour Glurp,
Un grand merci pour ton attention et tes interventions.
J'ai testé le code mais le problème est le même.
Cela reste sur l'explosion qui se répète sans cesse.
De plus lorsque le timeout est placé dans l'enterframe, si il n'y pas de collision, cela coupe l'animation et renvoi sur le score au bout de 2 secondes.
S'il y a collision cela reste bloqué sur l'explosion.
Alors que l'effet voulu est que cela aille sur le score 2 secondes après la collision.
J'ai essayé de placé le code différemment mais le problème qui reste toujours est que cela reste bloqué sur l'explosion.
Peut-être existe t il une manière différente d'aborder le problême?
Je continu de chercher.
Si quelqu'un à une idée, elle bienvenue.
Bonne journée à vous icon_smile.gif



#7 glurp

    Modérateur

  • Moderateur
  • 1 249 messages

Posté 31 août 2009 - 04:24

Salut olihya,

Je ne connais pas tout ton code mais tu devrais peut-être vérifier et tracer ton problème avec des "put"...
Un timeout est un outil pour appeler une fonction à intervalle régulier. Normalement tu dois pouvoir t'en servir pour appeler la fonction une fois puis le supprimer.
Vérifie ce qui se passe entre le moment de sa création et sa destruction...





1 utilisateur(s) li(sen)t ce sujet

0 membre(s), 1 invité(s), 0 utilisateur(s) anonyme(s)

authorised training centre

Centre de Formation Mediabox - Adobe et Apple Authorised Training Center.

Déclaré auprès de la Direction du Travail et de la Formation Professionnelle

Mediabox : SARL au capital de 62.000€ - Numéro d'activité : 11 75 44555 75 - SIRET : 49371646800035

MEDIABOX, 23, rue de Bruxelles, 75009 PARIS - Tel. 0826 466 613 - Fax. 01 72 70 31 38

FFP