Forums Développement Multimédia

Aller au contenu

Problème de code pour un débutant...

PAO Flash

2 réponses à ce sujet

#1 Troma3D

    Ceinture Blanche

  • Members
  • Pip
  • 2 messages

Posté 21 February 2013 - 16:49 PM

Bonjour,
Je commence a travailler en flash sur un site associatif mais je débute vraiment en code.
Dans mon scénario j'ai un MC regroupent tout les évènement d'un de mes menu, on y accède via un bouton a la racine de la séquence et jusque là aucuns problèmes.
Dans ce MC il y a un bouton "accueil" qui me permet de revenir a la racine de la séquence et il fonctionne très bien si l’évènement click renvoi directement a la racine
mon problème est que je souhaite faire une animation de sortie du menu, j'ai donc utiliser ce code :


Accueil_btn.addEventListener(MouseEvent.CLICK, fl_ClickToGoToAndPlayFromFrame_6);

function fl_ClickToGoToAndPlayFromFrame_6(event:MouseEvent):void
{
gotoAndPlay(31);
}

jusque la tout va bien... l'animation de fermeture se lance et arrivée a l'image 55 (celle de fin de l'annimation) j'ai mis ce code pour que se soit la position de la tête de lecture renvoie à la racine :


addEventListener(Event.ENTER_FRAME, fl_EnterFrameHandler);

function fl_EnterFrameHandler(event:Event):void
{
MovieClip(this.root).prevScene();

trace();

}
stop();

Le retour a la séquence fonctionne mais j'ai une erreur de sortie :TypeError: Error #1009: Il est impossible d'accéder à la propriété ou à la méthode d'une référence d'objet nul...
apres des recherches sur plusieurs forum, j'ai compris que le probleme venait de (event:Event) mais je ne comprend pas par quoi je doit le replacer !
Merci de votre aide

#2 dldler

  • Community Manager
  • PipPipPipPipPipPipPipPip
  • 4163 messages

Posté 21 February 2013 - 17:12 PM

Bonjour Troma

C'est un petit peu tordu, je trouve et j'ai du mal a tout situer, pour dire vrai.

Premier conseil : je crois que tu n'as pas encore bien calé certains mots de vocabulaire (événements, racine, séquence…), ce qui doit rajouter au flou. Essaye de t'exprimer en simple français, quand tu décris ce que tu veux faire, ça pourrait être plus clair et ça t'aidera je pense à clarifier ta logique avant de le coder.

Ensuite, si j'ai a peu près suivi :
tout va bien jusqu'à ta dernière image d'animation de sortie d'une page.
A la fin de cette page, tu veux revenir à la page d'accueil (?)

Petit souci à ce moment là :
tu poses un écouteur sur l'événement ENTER_FRAME
Le but de ce genre d'écouteur, c'est d'être actionné à chaque nouvelle image de l'animation.
Ce n'est pas ce que tu veux faire (enfin, je crois).
En plus, imaginons que ça marche. Ton animation reviens à la page d'accueil.
Une image plus tard, l'écouteur tente de relancer la fonction fl_EnterFrameHandler du clip anciennement affiché… clip qui n'est plus, puisque son scénario a été refermé, et pour moi, c'est ça qui déclenche ton erreur 1009, et pas l'événement.
Si tu gardais cette logique, tu devrais rétirer l'écouteur à l'intérieur de la fonction fl_EnterFrameHandler… mais alors… ça servirait à quoi d'avoir posé un écouteur sur chaque nouvelle image et de l'enlever dès la première fois ? ça ressemble a du travail inutile…

Peut-être bien qu'un simple MovieClip(this.root).prevScene(); sur ta dernière image serait suffisant…


Pour aller plus loin…
Quand on construit une structure comme ça, on passe plutôt par des événements personnalisés.
Par exemple un événement "AFFICHER_L_ACCUEIL"…

Sur ton scénario principal, tu écoutes cet événement…
this.addEventListener("AFFICHER_L_ACCUEIL", goto_accueil);

Dans ton sous clip de ta sous-séquence, sur la dernière image, tu diffuses un événement :
this.dispatchEvent(new Event("AFFICHER_L_ACCUEIL",true));

ça semble plus compliqué, mais c'est une construction a assimiler parce qu'elle apporte beaucoup de souplesse et de possibilités.

#3 Troma3D

    Ceinture Blanche

  • Members
  • Pip
  • 2 messages

Posté 21 February 2013 - 17:57 PM

Merci beaucoup, effectivement la solution simple fonctionne, je cherchai un écouteur la tête de lecture, mais en fait je viens de saisir qu'elle n'en avait pas besoin... :roll:
il va falloir que je me penche sur la deuxième solution que tu me propose afin de mieux comprendre son fontionement
Merci encore



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