AS3 : TypeError: Error #1010 [Résolu]

Signaler
Messages postés
30
Date d'inscription
lundi 24 mars 2003
Statut
Membre
Dernière intervention
25 avril 2009
-
Messages postés
30
Date d'inscription
lundi 24 mars 2003
Statut
Membre
Dernière intervention
25 avril 2009
-
Bonjour,

Je suis en train de passer doucement de l'AS2 à l'AS3, et bien sur, ça ne se fait pas sans mal !

Voici mon problème : j'ai une animation, qui se déroule, puis :
- charge un SWFexterne via la fonction loadRotation();
- refais passer au premier plan les items de menu qui sont "sous" ce SWF externe, via la fonction pushTop();
- lance la lecture du SWF externe (que je veux aussi pouvoir controller de façon plus avancée par la suite, mais si au moins je pouvais lancer la lecture, ce serait déjà pas mal !) via la fonction avance();

Lorsque je teste mon anim', tout se passe très bien, jusqu'à ce que j'appelle la fonction avance(); où j'ai alors l'errerur :
TypeError: Error #1010: Un terme n'est pas défini et n'a pas de propriété.
    at index_fla::MainTimeline/avance()
    at index_fla::MainTimeline/frame277()

Ca va faire deux jours que je m'arrache les cheveux sur cette anim', si quelqu'un peut me dépanner ce serait vraiment top.
Je vous donne mon code ci-dessous, merci d'avance !

function loadRotation() {
    var loader:Loader = new Loader();
    loader.load(new URLRequest("../vidz/vid_rotation.swf"));
    loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onComplete);
    function onComplete(event:Event):void {
        var externalMovie=MovieClip(loader.content);// cast 'DisplayObject' to 'MovieClip'
        addChild(externalMovie);// add your swf directly to the stage
        auTop();
    }
}

function auTop() {
    var myTimer:Timer=new Timer(1,1);
    myTimer.addEventListener("timer", pushTop);
    myTimer.start();
}

function pushTop(e:Event):void {
    var maxIndex:Number=this.numChildren-1;
    trace("GO TOP ="+maxIndex);
    this.setChildIndex(menu8 as MovieClip, maxIndex);
    this.setChildIndex(menu9 as MovieClip, maxIndex);
    this.setChildIndex(menu10 as MovieClip, maxIndex);
}

function avance() {
    this.externalMovie.play();
}

6 réponses

Messages postés
1393
Date d'inscription
dimanche 28 novembre 2004
Statut
Membre
Dernière intervention
2 août 2011

Hello,

je pense que le probleme vient de là :

var externalMovie=MovieClip(loader.content);// cast 'DisplayObject' to 'MovieClip'

car tu declare cette var dans une fonction donc
function avance() {
    this.externalMovie.play();
}
ne trouve plus externalMovie

-- Orange73 --
"L'homme n'est pas fait pour travailler, la preuve c'est que cela le fatigue" (Voltaire)
Messages postés
1393
Date d'inscription
dimanche 28 novembre 2004
Statut
Membre
Dernière intervention
2 août 2011

Tu n'as qu'as declarer ta var externalMovie en dehors de tes fonctions.

var externalMovie:MovieClip;

function loadRotation() {
    var loader:Loader = new Loader();
    loader.load(new URLRequest("../vidz/vid_rotation.swf"));
    loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onComplete);
    function onComplete(event:Event):void {
        externalMovie=MovieClip(loader.content);// cast 'DisplayObject' to 'MovieClip'
        addChild(externalMovie);// add your swf directly to the stage
        auTop();
    }
}

function auTop() {
    var myTimer:Timer=new Timer(1,1);
    myTimer.addEventListener("timer", pushTop);
    myTimer.start();
}

function pushTop(e:Event):void {
    var maxIndex:Number=this.numChildren-1;
    trace("GO TOP ="+maxIndex);
    this.setChildIndex(menu8 as MovieClip, maxIndex);
    this.setChildIndex(menu9 as MovieClip, maxIndex);
    this.setChildIndex(menu10 as MovieClip, maxIndex);
}

function avance() {
    this.externalMovie.play();
}

-- Orange73 --
"L'homme n'est pas fait pour travailler, la preuve c'est que cela le fatigue" (Voltaire)
Messages postés
30
Date d'inscription
lundi 24 mars 2003
Statut
Membre
Dernière intervention
25 avril 2009

Hum, ok en effet, tu as raison c'est bien ça qui semble clocher.

Cependant, je n'arrive pas à comprendre comment je peux faire de ce movieClip quelque chose de "manipulable". A la base j'essayais de manipuler l'objet "loader" puis j'ai trouvé (ici) qu'il fallait le cast pour dire à flash que le "displayObject" était en fait un "movieClip" afin de pouvoir le manipuler.

C'est donc ce que j'ai fait, mais finalement, je n'ai fais que déplacer le problème. Je pensais qu'avec le "addChild(externalMovie);" il y aurait bien une instance de "externalMovie" sur mon Stage, auquel je pourrai donner des instructions (de bêtes "gotoAndPlay"). Mais que nenni, c'est encore plus complexe.

Si quelqu'un sait comment me sortir de là, je suis preneur ! Merci.
Messages postés
30
Date d'inscription
lundi 24 mars 2003
Statut
Membre
Dernière intervention
25 avril 2009

Ho merci ! merci !

C'était pourtant pas siii compliqué.... Je me demande si j'arriverai un jour à bien comprendre dans son ensemble le fonctionnement de cet coquin d'AS3.

En tous cas tout fonctionne parfaitement maintenant, merci encore !
Messages postés
1393
Date d'inscription
dimanche 28 novembre 2004
Statut
Membre
Dernière intervention
2 août 2011

De rien...

"Je me demande si j'arriverai un jour à bien comprendre dans son ensemble le fonctionnement de cet coquin d'AS3."

Pourtant c'est la meme chose en AS2

-- Orange73 --
"L'homme n'est pas fait pour travailler, la preuve c'est que cela le fatigue" (Voltaire)
Messages postés
30
Date d'inscription
lundi 24 mars 2003
Statut
Membre
Dernière intervention
25 avril 2009

Bon ben j'suis mal barré alors :p

Plus sérieusement, je me suis mis depuis peu à l'AS3, et je suis encore perdu par tous ces events, eventListeners et autres nouveautés à gérer. Un bon vieux "onRelease" placé sur un bouton ça me convenait bien !

Pareil pour la gestion des _level, j'adorais ça et ça me régalait de jouer sur plein de movies indépendants à partir de frames, de boutons, de clips...

Ceci dit, si je comprends bien les gros progrès d'optimisation que représentent l'AS3 : avant Flash faisait un tas de choses bien souvent inutiles même quand on ne lui demandait rien. Maintenant il ne fait rien sans qu'on lui demande (et qu'on lui montre comment faire, quel noob !) J'imagine qu'il faut "juste" que je reprenne mes marques avec la syntaxe.

En attendant j'ai du bookmark ce forum !