Aller au contenu


[résolu] :  Mettre en pause une scene 3D


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

#1 olihya

    Ceinture Jaune

  • Members
  • 28 messages

Posté 10 août 2009 - 12:48

Bonjour à vous,
Je tente vainement de mettre en pause ma scene 3D.
Voilà ce que j'ai fait:

Dans :

Lingo

 
on beginsprite me
member("Scene").model("boite1").addModifier(#bonesPlayer)
end
Ensuite dans :

Lingo


on exitFrame me


boite1.translate(0,0,-20)

if keypressed("m") then
member("Scene").model("boite1").bonesPlayer.play()
end if
if keypressed("p") then
member("Scene").model("boite1").bonesPlayer.pause()
end if
end

Avez vous des suggestions? icon_idea.gif
Bonne journée

#2 glurp

    Modérateur

  • Moderateur
  • 1 249 messages

Posté 10 août 2009 - 03:30

Salut olihya,

Une scène w3d peut contenir 3 types d'animation ; les bonesPlayers, les keyFramePlayers et les animations gérées en lingo.
Dans ton cas, tu ne fais que mettre l'animation du modèle boite en pause...

Personnellement, j'utilise toujours une variable booléenne globale gPause.
Cette variable est testée dans mon masterTempo (celui qui envoit les évènements d'animations à tous mes objets) pour activer ou non les évènements temporels.

D'autre part, tu dois parcourir la liste des modèles (je te conseille de te faire une liste des modèles animés, par soucis d'optimisation) pour vérifier leur type d'animation et les passer en pause().

Une fois que toutes les animations 3d et les calculs sont en pause, on peut dire que ton application l'est aussi.
Cependant, le calcul du rendu sera toujours effectué, pour le bloquer tu as normalement accès à suspendUpdates() (à voir si cette fonction, non documentée je pense, est toujours présente dans D11).

#3 olihya

    Ceinture Jaune

  • Members
  • 28 messages

Posté 10 août 2009 - 08:58

Citation (glurp @ Aug 10 2009, 04:30 PM)
Salut olihya,

Une scène w3d peut contenir 3 types d'animation ; les bonesPlayers, les keyFramePlayers et les animations gérées en lingo.
Dans ton cas, tu ne fais que mettre l'animation du modèle boite en pause...

Personnellement, j'utilise toujours une variable booléenne globale gPause.
Cette variable est testée dans mon masterTempo (celui qui envoit les évènements d'animations à tous mes objets) pour activer ou non les évènements temporels.

D'autre part, tu dois parcourir la liste des modèles (je te conseille de te faire une liste des modèles animés, par soucis d'optimisation) pour vérifier leur type d'animation et les passer en pause().

Une fois que toutes les animations 3d et les calculs sont en pause, on peut dire que ton application l'est aussi.
Cependant, le calcul du rendu sera toujours effectué, pour le bloquer tu as normalement accès à suspendUpdates() (à voir si cette fonction, non documentée je pense, est toujours présente dans D11).

Bonjour Glurp,
Merci pour ton attention et ta réponse très intéressante.
Je cherchais effectivement à ne mettre que la boite en pause mais malgré qu'il n'y ai aucun message d'erreur la boite continue sa translation.
C'est là que je bloque.
En fait c'est un vaisseau qui se déplace au milieu d'obstacles et j'aimerai mettre en pause son déplacement.
Je pense que je dois mal implanter le code.
Est-ce que le code que j'ai écris est correcte icon_question.gif
Bonne soirée icon_biggrin.gif




#4 Quatre1124

    Ceinture Blanche

  • Members
  • 10 messages

Posté 11 août 2009 - 05:41

Salut Olihya,
pourquoi tu n'utilise pas une variable booléen que tu teste avant ton déplacement?
tu l'initialise a TRUE et tu la contrôle avec l'appui sur tes touches P et M
un truc du genre

Code
global deplacementOK

...
if keypressed("m") then  
     deplacementOK= TRUE
end if

if keypressed("p") then  
     deplacementOK= FALSE
end if  

if deplacementOK then
   boite.translate(0,10,10)
end if





#5 glurp

    Modérateur

  • Moderateur
  • 1 249 messages

Posté 11 août 2009 - 06:26

icon_arrow.gif Si la translation a été réalisée dans un programme d'édition 3D type 3DSMax, l'animation sera au format keyFramePlayer (le bonesPlayer, comme son nom l'indique, ne concerne que les animations utilisant des bones).

#6 olihya

    Ceinture Jaune

  • Members
  • 28 messages

Posté 11 août 2009 - 01:11

Bonjour Quatre,
Merci pour ta réponse.
Effectivement ça n'est pas plus compliqué que ça.
J'avais essayé de faire quelque chose dans cet esprit mais sans utiliser la variable qui met à true ou false et lorsque je lançais le vaisseau il avançait un peu puis s'arrêtait.
Voici une petite amélioration pour n'avoir à cliquer que sur p pour mettre en pause:

Lingo


global test, deplacementOK

on keydown
if the key = "p" then
put test
test = 1 -test
deplacementOK= true
end if
end

on exitFrame me

if test then
deplacementOK= FALSE
else
deplacementOK= TRUE
end if
if deplacementOK then
boite1.translate(0,0,-20)
end if
Bonnes vacances à toi si tu en as. icon_smile.gif

Bonjour Glurp
Merci pour tes conseils.
Cela me donne des pistes à approfondir.
La boite (le vaisseau) à été réalisé avec Director.
Quelle est la commande la plus appropriée pour contrôler le mouvement du vaisseau?
Bonne journée
icon_smile.gif



#7 Quatre1124

    Ceinture Blanche

  • Members
  • 10 messages

Posté 11 août 2009 - 05:26

Salut Olihya

un peu alambiqué ton contrôle avec une seule touche.. pourquoi tu n'as pas fais un truc comme ça ?
Code
on keydown
     if the key = "p" then
     if deplacementOK =TRUE then deplacementOK = FALSE
     else deplacementOK = TRUE
   end if
end


et dans ton 'exitframe' tu ne met que ton code de déplacement



#8 olihya

    Ceinture Jaune

  • Members
  • 28 messages

Posté 11 août 2009 - 10:04

Citation (Quatre1124 @ Aug 11 2009, 06:26 PM)
Salut Olihya

un peu alambiqué ton contrôle avec une seule touche.. pourquoi tu n'as pas fais un truc comme ça ?
Code
on keydown
     if the key = "p" then
     if deplacementOK =TRUE then deplacementOK = FALSE
     else deplacementOK = TRUE
   end if
end


et dans ton 'exitframe' tu ne met que ton code de déplacement

Oui effectivement, merci pour tes suggestions.
A bientôt

#9 olihya

    Ceinture Jaune

  • Members
  • 28 messages

Posté 11 août 2009 - 10:23

Une petite remarque
Ce code fait démarrer le jeu en pause.

#10 Quatre1124

    Ceinture Blanche

  • Members
  • 10 messages

Posté 12 août 2009 - 05:40

Citation (olihya @ Aug 11 2009, 11:23 PM)
Une petite remarque
Ce code fait démarrer le jeu en pause.


salut
dans ton initialisation , tu force ta variable deplacementOK a TRUE
je l'ai implémenté dans mon code et j'ai pas de soucis...

#11 olihya

    Ceinture Jaune

  • Members
  • 28 messages

Posté 12 août 2009 - 12:47

Citation (Quatre1124 @ Aug 12 2009, 06:40 AM)
salut
dans ton initialisation , tu force ta variable deplacementOK a TRUE
je l'ai implémenté dans mon code et j'ai pas de soucis...

Salut Quatre,
Ok ça marche.
Merci. icon_wink.gif





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