Forums Développement Multimédia

Aller au contenu

Accès à un movie clip dans un movieclip

PAO Flash

9 réponses à ce sujet

#1 elneo47

    Ceinture Jaune

  • Members
  • PipPip
  • 17 messages

Posté 21 January 2013 - 15:52 PM

Bonjour,
J'ai crée un movieclip (MV1) incluant lui même un autre movieclip (MV2).
Sur la timeline ("racine"), mon code appelle une occurence qui est dans MV2, mais quand je teste, j'ai le message d'erreur accès à la propriété non définie, car je pense que j'ai un clip dans un clip.
Donc ma question est la suivante, comment dans un code présent à la "racine" faire appel à une occurence présente dans un movieclip.
Je vous remercie par avance pour votre aide.
Cordialement

#2 Nataly

    Community Jane

  • Moderateur
  • PipPipPipPipPipPipPipPip
  • 5783 messages

Posté 21 January 2013 - 16:28 PM

salut elnéo,

Question d'adressage : si truc (que tu cherches à "atteindre") est déclaré ds MV2 lui même inclus ds MV1 :

trace(MV2.MV1.truc)

(pas dit que tu t'y prennes de la meilleurs façon qui soit en pulvérisant des morceaux de code, voire des variables, un peu partout dans les clips… :roll: )
Le savoir est le seul bien qui s'accroit quand on le partage
une tartine de tutos

#3 elneo47

    Ceinture Jaune

  • Members
  • PipPip
  • 17 messages

Posté 21 January 2013 - 17:27 PM

J'ai peut être mal expliqué, en fait j'ai un 1er clip MV1 comprend 3 boutons (en Movie clip) MV11, MV12 MV13. Chaque boutons (movieclip) a 2 états (non appuyé frame 1 et appuyé frame 2). je souhaite pouvoir cliquer sur l'un des 3 boutons qui sont dans MV1.
Si les movies clip boutons avaient été à la racine j'aurais utilisé ce code : (info : zonebouton correspond à une zone bouton de détection d'appuie pour localiser le bouton 1 (MV11) le bouton 2 (MV12) ou le bouton 3 (MV13) et aussi pour changer le curseur de la souris de pointeur à main).

zonebouton1.addEventListener(MouseEvent.MOUSE_DOWN, boutont1ON);
zonebouton2.addEventListener(MouseEvent.MOUSE_DOWN, boutont2ON);
zonebouton3.addEventListener(MouseEvent.MOUSE_DOWN, boutont3ON);
zonebouton1.addEventListener(MouseEvent.MOUSE_UP, boutont1OFF);
zonebouton2.addEventListener(MouseEvent.MOUSE_UP, boutont2OFF);
zonebouton3.addEventListener(MouseEvent.MOUSE_UP, boutont3OFF);

function boutont1ON(evt:MouseEvent):void
{
MV11.gotoAndStop(2);
}

function boutont1OFF(evt:MouseEvent):void
{
MV11.gotoAndStop(1);
}

function boutont2ON(evt:MouseEvent):void
{
MV12.gotoAndStop(2);
}

function boutont2OFF(evt:MouseEvent):void
{
MV12.gotoAndStop(1);
}

function boutont3ON(evt:MouseEvent):void
{
MV13.gotoAndStop(2);
}

function boutont3OFF(evt:MouseEvent):void
{
MV13.gotoAndStop(1);
}

Du coup je vue que MV11, MV12, MV13 sont inclus dans MV1 est il possible avec votre synthaxe trace(MV1.MV12) de voir l'animation sur mes boutons car j'ai essayé mais je n'ai pas réussis.

Modifié par Krevare, 22 January 2013 - 19:54 PM.
Ajout des balises de code


#4 Nataly

    Community Jane

  • Moderateur
  • PipPipPipPipPipPipPipPip
  • 5783 messages

Posté 21 January 2013 - 18:45 PM

… si j'ai compris… (pas sure ;)) :

tu veux envoyer un clip image1 quand sa tête de lecture est en 2, sinon, image 2 (quand elle est en 1)

pour un clip quelconque, mettons leClip, ça donnerait


if(leClip.currentFrame==1){
         leClip.gotAndStop(2)
}else{
         leClip.gotAndStop(1)
}
 

donc
• soit tu ajoutes un écouteur par "bouton" et tu leur souscris la même fonction de rappel en utilisant un couplage faible, donc currentTarget en lieu et place de leClip
• soit tu écoutes les contenants, en phase de capture, la fonction de rappel utilise alors target (en ayant pris soin de passer la propriété mouseChildren à false ;))


toutes les grossièretés que j'ai employées sont expliquées dans ce tuto


sans doute ce qui t'intéresse le plus est-il à partir du chapitre associer un même écouteur à plusieurs objets

:)
Le savoir est le seul bien qui s'accroit quand on le partage
une tartine de tutos

#5 elneo47

    Ceinture Jaune

  • Members
  • PipPip
  • 17 messages

Posté 21 January 2013 - 20:47 PM

Je vous remercie pour votre aide, bon finalement j'ai pu solutionner une partie du problème grâce à votre explication "trace(MV2.MV1.truc)" par contre il me reste un petit problème de 1ère plan 2nd plan.
Imaginons que mon bouton se trouve au 2nd plan et que devant lui (au 1er plan) ce trouve une image transparente à 50% (ex). Je ne peux donc plus cliquer dessus car une image se trouve devant.
Existe t'il une solution sans mettre le bouton au 1er plan pour utiliser ce bouton?
Je met en PJ un exemple de ce qui me pose problème.

Fichier(s) joint(s)

  • Fichier joint  exemple.fla   118.05 Ko   2 téléchargement(s)


#6 Nataly

    Community Jane

  • Moderateur
  • PipPipPipPipPipPipPipPip
  • 5783 messages

Posté 21 January 2013 - 22:59 PM

clipImage.mouseEnabled =false

;)
Le savoir est le seul bien qui s'accroit quand on le partage
une tartine de tutos

#7 elneo47

    Ceinture Jaune

  • Members
  • PipPip
  • 17 messages

Posté 22 January 2013 - 01:44 AM

Merci pour l'explication effectivement c'est bien pratique.
Maintenant j'ai avancé un peu, à partir de ce clip (MV1) je souhaite contrôler un clip MV2
MV1
----bouton Haut (MV11)
----bouton STOP (MV12)
----bouton BAS (MV13)

MV2 est une interpolation de mouvement pour lequel quand je clique sur MV11, l'animation présente dans MV2 monte (Lecture) quand je clique sur MV12 je stop MV2 enfin quand je clique sur MV13 l'animation descend (lecture à l'envers).
A partir de recherche sur le net j'ai abouti à ce code pour gérer la lecture à l'envers du clip (pour remonter) :

MV11.addEventListener(MouseEvent.CLICK, HAUT);
function HAUT (e:MouseEvent):void
{
        addEventListener(Event.ENTER_FRAME, playBackwards);
}

function playBackwards(e:Event):void
{
        var frame:int = volet.currentFrame -1; //get frame before current;
        nuit.gotoAndStop(frame); // go to that frame
        volet.gotoAndStop(frame); // go to that frame
        if(frame == 1) removeEventListener(Event.ENTER_FRAME, playBackwards);
}

Mais ce code ne permet pas d'arrêter le clip MV2, je ne peux pas faire pause en fait, il permet de monter et descendre mais impossible de stopper avec MV12, si je clique sur MV13 le clip s'arrête mais impossible de le relancer.

De plus je souhaiterai savoir comment connaitre la valeur de MV2 (position de frame = MV2.currentFrame ne marchant pas) peut être le code permettant de connaître la frame d'un clip m'aidera à résoudre mon précédent problème.

Je vous remercie par avance.

Cordialement.

Modifié par Krevare, 22 January 2013 - 19:55 PM.
Ajout des balises de code


#8 elneo47

    Ceinture Jaune

  • Members
  • PipPip
  • 17 messages

Posté 22 January 2013 - 11:34 AM

j'ai trouvé une solution pour faire arrêter la descente ou la montée.

J'ai vu qu'on pouvait rappeler une fonction dans une autre fonction par exemple ma fonction :
function verifier_lampe():void
je n'ai qu'à écrire verifier_lampe() à la fin d'une autre fonction pour que je puisse vérifier l'état de la lampe.
Mais je souhaiterai faire de même pour ce type de fonction
function playBackwards(e:Event):void
{
        var framevolet1:int = volet.currentFrame -1;
        nuit.gotoAndStop(framevolet1);
        volet.gotoAndStop(framevolet1);
        if(FRAME || BP3BASVOLET || BP2STOPVOLET ==true) removeEventListener(Event.ENTER_FRAME, playBackwards);
        if(framevolet1 == 1)
{}
}
J'ai repris la même méthode en recopiant function playBackwards(e:Event) ou function playBackwards() mais cela ne fonctionne pas, j'ai un message d'erreur 1126: La fonction ne comporte pas d'élément body.

Je veux réutiliser cette fonction pour connaître la position sur la frame de mon clip volet, mais si la fonction n'est pas active et que je demande trace (volet.currentFrame) en dehors de ma fonction, je n'ai pas de trace qui s'affiche alors que quand je place le code trace (volet.currentFrame) dans la fonction function playBackwards(e:Event):void j'ai bien le décompte des images qui apparait.

Donc j'en reviens un peu à la question précédente comment connaître la valeur de la frame d'un clip alors que celui ci n'est pas appelé dans une fonction.
Merci par avance.

Modifié par Krevare, 22 January 2013 - 19:56 PM.
Ajout des balises de code


#9 Krevare

    Ceinture Noire

  • Moderateur
  • PipPipPipPipPipPipPipPip
  • 923 messages

Posté 22 January 2013 - 19:57 PM

Bonsoir Elneo47,

Juste un petit mot pour te dire d'utiliser les balises de code lorsque tu en postes, ca le rend beaucoup plus lisible :)

Je l'ai fais pour toi dans tes derniers post mais e t'invite à le faire via les boutons prévus à cet effet la prochaine fois.
Ils sont situés sous le bouton des Smyley de l'éditeur de texte et sont représentés par les deux petits chevrons : "<>".

A bientôt :)

Fred.

#10 Nataly

    Community Jane

  • Moderateur
  • PipPipPipPipPipPipPipPip
  • 5783 messages

Posté 23 January 2013 - 12:38 PM

Voir le messageelneo47, le 22 January 2013 - 11:34 AM, dit :

J'ai vu qu'on pouvait rappeler une fonction dans une autre fonction

rappeler ou décrire ?

si par rappeler tu signifies invoquer (appeler tout court), oui bien sûr c'est même l'intérêt d'écrire des fonctions ;)
si tu signifies écrire une fonction dans une autre c'est une très mauvaise idée, la fonction appelée n'étant visible que depuis la fonction appelante et 'this' n'étant plus qui tu crois

Citation

J'ai repris la même méthode en recopiant function playBackwards(e:Event) ou function playBackwards() mais cela ne fonctionne pas, j'ai un message d'erreur 1126: La fonction ne comporte pas d'élément body.

très bien, tu as le numéro de ligne regarde ce qui y est écrit :)

Est-ce que tu ne confondrais pas écrire une fonction et invoquer une fonction ? par exemple quand on écrit une fonction on type les paramètres qu'elle attend, quand on l'invoque on lui passe un paramètre du type prévu… dans l'exemple que tu cites, tu mélanges tout : un truc qui ressemble à la signature d'une fonction, un autre qui ressemble à l'appel de la dite fonction mais sans paramètres

Citation

Je veux réutiliser cette fonction pour connaître la position sur la frame de mon clip volet, mais si la fonction n'est pas active […]

Je ne sais pas ce que signifie une fonction active ni ce que tu comprends par là…


Citation

Donc j'en reviens un peu à la question précédente comment connaître la valeur de la frame d'un clip alors que celui ci n'est pas appelé dans une fonction.

ben pff…
J'ai comme l'impression que tu t'es jeté ds le grand bain sans savoir nager en te disant qu'agiter les bras et les jambes dans tous les sens ça allait le faire. :cool:
Et d'ailleurs ça le fait - un peu.
ça s'appelle la nage du petit chien et comme chacun le sait, ça a ses limites, que tu rencontres d'ailleurs.

Quand tu as besoin d'une propriété ou d'une méthode (genre mouseEnabled pour la classe MovieClip) tu as la doc où chercher

Pour les fondamentaux (ce qu'est une fonction, ce que sont des méthodes ou propriétés, comment se structure le code…) l'aide est là pour ça. Si tu la trouves absconse ou insuffisante, tu trouveras sur le wiki d'idi de nombreux tutos en français, tu as même une page dédiée au démarrage (je t'ai - plus haut - donné un lien vers un de ceux que j'ai commis) et depuis google, une foultitude dans toutes les langues qui te siéront :)


Bon apprentissage ! :)
Le savoir est le seul bien qui s'accroit quand on le partage
une tartine de tutos



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

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