Forums Développement Multimédia

Aller au contenu

[résolu] :  atteindre un model dans une boucle

Director

13 réponses à ce sujet

#1 elran

    Ceinture Orange

  • Members
  • PipPipPip
  • 31 messages

Posté 12 April 2010 - 18:45 PM

bonjour,

je cherche à atteindre un model (ou objet 3D) à partir d'une boucle, voici ce que je fais:


on show_vignettes
  repeat with inc = 1 to 9                                                          
    if string(ModelClicked) = "model(" & QUOTE & "Vignette0" & inc & QUOTE &")" then
      pos_vignette_depart = member(2).Model("Vignette0"&inc).transform.position      
      member(2).Model("Vignette0"&inc).transform.position = vector( 255, -330, 1100 )
    else
      member(2).Model("Vignette0"&inc).transform.position = pos_vignette_depart
    end if
  end repeat
end
 

seulement à la ligne:
pos_vignette_depart = member(2).Model("Vignette0"&inc).transform.position

j'ai un message d'erreur:

Handler not found in object
(me donne la ligne...)
#model

donc ceci ne lui va pas:

member(2).Model("Vignette0"&inc).etc

question, comment s'y prendre pour atteindre un model d'une scène dans une boucle pour pouvoir lui affecter une action, ici un déplacement...

d'avance merci, je lutte là pour trouver!

#2 glurp

    Modérateur

  • Moderateur
  • PipPipPipPipPipPipPipPip
  • 1260 messages

Posté 12 April 2010 - 20:00 PM

Salut elran,

Il ne devrait pas y avoir de problème à moins que member(2).Model("Vignette0"&inc) n'existe pas...
Es-tu sûr que tu as bien un model qui porte le nom "Vignette0"&inc (inc allant de 1 à 9 donc) ?

#3 elran

    Ceinture Orange

  • Members
  • PipPipPip
  • 31 messages

Posté 12 April 2010 - 20:16 PM

aie aie aie,

bon j'étais donc sur la bonne piste, tant mieux, sauf que si, j'ai bien 9 vignettes allant de Vignette01 à Vignette09

et d'ailleurs, dans ma boucle j'ai une condition:

if string(ModelClicked) = "model(" & QUOTE & "Vignette0" & inc & QUOTE &")" then

et cette condition fonctionne, sous entendu que j'ai bien un model renvoyé par ModelClicked qui se nomme "Vignette0" & inc

pour ça aussi que je ne pige pas quoi faire de plus...


Voir le messageglurp, le 12 April 2010 - 20:00 PM, dit :

Salut elran,

Il ne devrait pas y avoir de problème à moins que member(2).Model("Vignette0"&inc) n'existe pas...
Es-tu sûr que tu as bien un model qui porte le nom "Vignette0"&inc (inc allant de 1 à 9 donc) ?


#4 elran

    Ceinture Orange

  • Members
  • PipPipPip
  • 31 messages

Posté 12 April 2010 - 21:50 PM

bon j'ai essayé ceci (donc en dur, pas de boucles):

  if showed = false then
    pos_vignette_depart = member(2).Model("Vignette01").Transform.position
    member(2).Model("Vignette01").Transform.position = vector( 255, -330, 1100 )
    showed = true
  else
    member(2).Model("Vignette01").Transform.position = pos_vignette_depart
    showed = false
  end if
 

ça ne marchait pas, alors j'ai fait ça:

  if showed = false then
    pos_vignette_depart = member("scene").Model("Vignette01").Transform.position
    member("scene").Model("Vignette01").Transform.position = vector( 255, -330, 1100 )
    showed = true
  else
    member("scene").Model("Vignette01").Transform.position = pos_vignette_depart
    showed = false
  end if
 

et ça à fonctionner...
je pensais que member(2) signifiait l'acteur de la piste 2 dans la timeline, faut croire que non?

autant pour moi...

#5 elran

    Ceinture Orange

  • Members
  • PipPipPip
  • 31 messages

Posté 12 April 2010 - 22:46 PM

suite de mes aventures...
je viens de trouver la propriété name de model!
et j'ai corriger ma boucle qui contenait et contient toujours des erreurs:


on show_vignettes
  repeat with inc = 1 to 9
    if string(ModelClicked.name) = "Vignette0"&inc then
      if viewing = false then
        pos_vignette_depart = member("scene").model("Vignette0"&inc).transform.position
        member("scene").model("Vignette0"&inc).transform.position = vector( 243.3211, -1.09215e3, -58.2109 )
        vignette = string(ModelClicked.name)
        viewing = true
      else
        member("scene").model(vignette).transform.position = pos_vignette_depart
        viewing = false
      end if
    end if
  end repeat
end
 

cette fois ça marche, quand je clique la première fois (viewing = false) j'ai bien mon objet qui change de position, par contre
lorsque je clique une seconde fois, sur le même objet, il ne reprend pas sa place d'origine, et j'ai un message me disant:
value out of range.

doit y avoir quelque chose qui ne va pas avec ma "logique" me demande même si j'en ai une.

tout ce que je cherche à faire c'est d'avancer une vignette si elle n'est pas avancée, et la remettre a sa place si elle à était avancée
c'est quand même pas si compliqué! je pige pas...

vous auriez des idées?

#6 glurp

    Modérateur

  • Moderateur
  • PipPipPipPipPipPipPipPip
  • 1260 messages

Posté 13 April 2010 - 00:41 AM

Citation

je pensais que member(2) signifiait l'acteur de la piste 2 dans la timeline, faut croire que non?

Oulà, attention à ne pas tout mélanger, la timeline contient des sprites, qui eux contiennent des members.
Donc pour faire ce que tu voulais, ça aurait donné sprite(2).member.model(...)...

Pour revenir à ton code, je vois en effet une erreur puisque tu utilises model(vignette) dans ton else alors que la variable vignette n'est définie nulle part ailleurs que dans le if viewing = false then (pour l'utiliser comme tel, il faudrait qu'elle soit déclarée en variable de propriété).

Bref, que des petites erreurs liés au fonctionnement de base de Director.
Si tu as 5 min, je te conseille de jeter un oeil sur les tuto :
http://director.medi...?showtopic=9468
http://director.medi...?showtopic=9471

#7 elran

    Ceinture Orange

  • Members
  • PipPipPip
  • 31 messages

Posté 13 April 2010 - 11:23 AM

merci pour ta réponse et les liens,

je vais les prendre les 5 minutes... c'est jamais perdu ;)

ça m'avait échapper le coup de la variable déclarée dans le if.
en fait la première fois que je fais ma boucle elle est bien initialisée, par contre, comme on en sort de la boucle avant de cliquer une 2ème fois, je perds sa valeur, c'est ça que tu me dis? d'où le besoin de la passé en property?

#8 elran

    Ceinture Orange

  • Members
  • PipPipPip
  • 31 messages

Posté 13 April 2010 - 12:07 PM

bon, j'ai suivi ton conseil, sauf qu'au final vignette (maintenant selected_vignette) est passée en variable global afin de l'initiliser
dans le on beginsprite à "" (et elle me sert aussi pour vérifier si une vignette à était sélectionnée ou pas...).

(pour pos_vignette_depart, ça ne fonctionné pas quand elle était en property, je sais pas pourquoi, mais en global ça fonctionne)

maintenant ça fonctionne, voici le code:


global selected_vignette, pos_vignette_depart

on show_vignettes
  repeat with inc = 1 to 9
    if string(ModelClicked.name) = "Vignette0"&inc then
      if selected_vignette = "" then
        pos_vignette_depart = member("scene").model("Vignette0"&inc).transform.position
        member("scene").model("Vignette0"&inc).transform.position = vector( 243.3211, -1.09215e3, -58.2109 )
        selected_vignette = ModelClicked.name
      else
        member("scene").model(selected_vignette).transform.position = pos_vignette_depart
        selected_vignette = ""
      end if
    end if
  end repeat
end
 

mais, ben oui ce serait pas rigolo si il n'y en avait pas de mais...

me reste un dernier point à éclaircir:

les vignettes se déplacent, à priori, en fonction de leur point de départ, si bien que ma vignette de référence (une vignette pour laquelle j'avais créé des petits boutons x+5, x-5, y+5, y-5, z+5 et z-5 afin de pouvoir la déplacer et tester jusqu'où je voulais qu'elle se rapproche de la caméra) est bien placée, alors que les autres se retrouvent décalée vers le bas et la droite, en fonction de leur position de départ.

malheureusement, je pensais que ça allait les déplacées par rapport à l'univers... et donc de manière "absolue", mais il n'en est rien :(

en fouinant un peu dans l'aide de director, j'ai pu apprendre qu'effectivement transform.position déplacent des objets par rapport à leur parent, d'où ma conclusion: par rapport au point de départ...

puis j'ai trouvé: GetworldTransform()

je croyais que ça allait me sauvé, mais non, si je remplace la ligne (dans le if):

member("scene").model("Vignette0"&inc).transform.position = vector( 243.3211, -1.09215e3, -58.2109 )

par

member("scene").model("Vignette0"&inc).GetworldTransform().position = vector( 243.3211, -1.09215e3, -58.2109 )

il ne se passe plus rien, la vignette n'avance plus...

j'espère que je vais pas devoir me taper un d'algo pour déplacer chaque vignettes en fonction de leur point de départ :/
je crois que mon cerveau est trop dans les choux pour ça. :/

y'a forcément quelque chose que je loupe là, et GetworldTransform() semble pourtant bien être la solution à retenir..??

des idées?

#9 elran

    Ceinture Orange

  • Members
  • PipPipPip
  • 31 messages

Posté 13 April 2010 - 12:14 PM

EDIT: la dernière ligne sur la propriété GetworldTransform() m'avait échappé:
"Ces propriétés peuvent être testées, mais pas définies."

du coup il ne me reste plus qu'a faire un algo c'est ça?







Voir le messageelran, le 13 April 2010 - 12:07 PM, dit :

bon, j'ai suivi ton conseil, sauf qu'au final vignette (maintenant selected_vignette) est passée en variable global afin de l'initiliser
dans le on beginsprite à "" (et elle me sert aussi pour vérifier si une vignette à était sélectionnée ou pas...).

(pour pos_vignette_depart, ça ne fonctionné pas quand elle était en property, je sais pas pourquoi, mais en global ça fonctionne)

maintenant ça fonctionne, voici le code:


global selected_vignette, pos_vignette_depart

on show_vignettes
  repeat with inc = 1 to 9
    if string(ModelClicked.name) = "Vignette0"&inc then
      if selected_vignette = "" then
        pos_vignette_depart = member("scene").model("Vignette0"&inc).transform.position
        member("scene").model("Vignette0"&inc).transform.position = vector( 243.3211, -1.09215e3, -58.2109 )
        selected_vignette = ModelClicked.name
      else
        member("scene").model(selected_vignette).transform.position = pos_vignette_depart
        selected_vignette = ""
      end if
    end if
  end repeat
end
 

mais, ben oui ce serait pas rigolo si il n'y en avait pas de mais...

me reste un dernier point à éclaircir:

les vignettes se déplacent, à priori, en fonction de leur point de départ, si bien que ma vignette de référence (une vignette pour laquelle j'avais créé des petits boutons x+5, x-5, y+5, y-5, z+5 et z-5 afin de pouvoir la déplacer et tester jusqu'où je voulais qu'elle se rapproche de la caméra) est bien placée, alors que les autres se retrouvent décalée vers le bas et la droite, en fonction de leur position de départ.

malheureusement, je pensais que ça allait les déplacées par rapport à l'univers... et donc de manière "absolue", mais il n'en est rien :(

en fouinant un peu dans l'aide de director, j'ai pu apprendre qu'effectivement transform.position déplacent des objets par rapport à leur parent, d'où ma conclusion: par rapport au point de départ...

puis j'ai trouvé: GetworldTransform()

je croyais que ça allait me sauvé, mais non, si je remplace la ligne (dans le if):

member("scene").model("Vignette0"&inc).transform.position = vector( 243.3211, -1.09215e3, -58.2109 )

par

member("scene").model("Vignette0"&inc).GetworldTransform().position = vector( 243.3211, -1.09215e3, -58.2109 )

il ne se passe plus rien, la vignette n'avance plus...

j'espère que je vais pas devoir me taper un d'algo pour déplacer chaque vignettes en fonction de leur point de départ :/
je crois que mon cerveau est trop dans les choux pour ça. :/

y'a forcément quelque chose que je loupe là, et GetworldTransform() semble pourtant bien être la solution à retenir..??

des idées?


#10 elran

    Ceinture Orange

  • Members
  • PipPipPip
  • 31 messages

Posté 13 April 2010 - 12:35 PM

arf, encore une chose,

sous 3ds max, les points de pivots de mes vignettes sont tous les même, ils sont tous aligner sur le point de pivot du cadre, c'est comme ça que je peut facilement faire pivoter mes objets 3D sur place sans les liées puisque quand on les lies on ne peut plus y accéder (ou alors peut être que ce n'est plus la même façon d'y accéder, je sais pas...)

n'empêche que je croyais avoir compris que je déplacé les objets par rapport à leur point d'origine, donc par rapport à leur point de pivot d'origine, hors, à priori, il n'en est rien, puisque mes vignettes ont toutes le même point de pivot.

du coup je ne pige plus par rapport à quoi se base director pour modifier la position d'un objet???

#11 elran

    Ceinture Orange

  • Members
  • PipPipPip
  • 31 messages

Posté 13 April 2010 - 12:42 PM

edit: ou alors c'est bien par rapport au point de pivot qu'elles se déplacent et comme les vignettes sont "décalée" par rapport à leur point de pivot (comprendre que le point de pivot n'est pas au centre de mes vignettes) elle le sont toujours d'autant à leur point d'arrivée? (normal quoi)
et là j'ai l'impression de retomber sur mes pattes: va me falloir faire un algo pour gérer ce décalage..?

#12 elran

    Ceinture Orange

  • Members
  • PipPipPip
  • 31 messages

Posté 13 April 2010 - 14:46 PM

hmm, parfois j'aimerais pouvoir supprimer mes postes...
algo en cours.

Modifié par elran, 13 April 2010 - 14:46 PM.


#13 glurp

    Modérateur

  • Moderateur
  • PipPipPipPipPipPipPipPip
  • 1260 messages

Posté 13 April 2010 - 19:45 PM

Voir le messageelran, le 13 April 2010 - 14:46 PM, dit :

hmm, parfois j'aimerais pouvoir supprimer mes postes...
algo en cours.
En effet, on s'y perd :lol:

On va faire simple :
Quelle est ta question ?
(tu as droit à 1 ligne pour ce que tu cherches à faire et 1 ligne pour la question, top ! :D )

PS : Pourquoi utilises-tu une variable globale alors qu'une variable de propriété suffirait (c'est plus propre) ?

#14 elran

    Ceinture Orange

  • Members
  • PipPipPip
  • 31 messages

Posté 14 April 2010 - 11:52 AM

ben en fait, faut que je re vérifie mais ça marché pas quand on propriété...

et pour ma question on va faire simple:
en fait non rien tout va bien tout fonctionne!
mais j'ai encore quelques questions sous la main...
mais le sujet n'est plus à propos.

Voir le messageglurp, le 13 April 2010 - 19:45 PM, dit :


Quelle est ta question ?
(tu as droit à 1 ligne pour ce que tu cherches à faire et 1 ligne pour la question, top ! :D )

PS : Pourquoi utilises-tu une variable globale alors qu'une variable de propriété suffirait (c'est plus propre) ?




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

FFP