2009-02-27 6 views
0

J'ai un clip qui est attaché avec attachMovieClip, et il a une fonction qu'il a appelé test()appeler une fonction qui est définie dans un MovieClip - ActionScript 2

///

function test() 
{ 
    trace('!'); 
} 

après avoir attaché le clip j'essayais d'appeler cette fonction, mais je ne pouvais tout simplement pas. Y a-t-il une solution simple pour cela? J'ai lu quelque chose sur vous, vous ne pouvez pas appeler la fonction tant que le clip n'est pas complètement chargé ... y a-t-il une solution simple pour cela?

+0

pouvez-vous appeler la fonction après le chargement du film? – dirkgently

+0

Comment appelez-vous la fonction? Est-ce que vous le faites à travers l'instance du MovieClip? –

Répondre

1

Assurez-vous que votre fonction "test" est définie sur la première image du scénario de MovieClip. Utilisez ensuite le gestionnaire MovieClip.onLoad pour capturer lorsque MovieClip est prêt à recevoir des appels de fonction. Après cela, vous devriez être en mesure d'appeler "test" sur votre clip.

Bonne chance!

+0

C'est bizarre. quand vous ne pouvez pas accéder à la fonction in-movieclip (comme vous l'avez mentionné, je devrais attendre un peu), je peux accéder à l'élément interne et les positionner et .... Je préfère faire ce que j'ai fait dans ma fonction sans utiliser de fonction (et manuellement) pour éviter d'utiliser le onLoad(). – Emadpres

+0

@ seedpod.mp Si j'ai de nombreux MovieClips en scène, comment puis-je m'assurer qu'ils sont tous chargés et prêts à être initialisés (= et leurs fonctions sont disponibles)? – Emadpres

1

Vous pouvez définir la fonction en dehors du MovieClip, dans le scénario principal. Ensuite, la fixation (via attachMovie), vous pouvez passer à travers le initObject (4ème paramètre):

function test(p) { 
    trace("called with "+p); 
} 
this.attachMovie("lib_clip","clip_mc",3,{func:test, mp:"my parameter"}); 
clip_mc._x = 100; 
clip_mc._y = 100; 
clip_mc.onRelease = function() { 
    this.func(this.mp); 
}; 

Vyger

0

Il a été un moment que je AS2, comme des roches AS3, mais je crois que vous devez donner un ID d'instance au clip joint. Et vous devez également attendre que le film soit prêt.

//MovieClip with function hello() in it. 
hello():Void 
{ 
    trace('Hello world!'); 
} 

//Root timeline of main movie. 
container.attachMovieClip("nameInLibraryToAttach", "instanceID", depth); 

//The following will not trace because it happens to soon. 
container.instanceID.hello(); 

//The following works 
var runOnceNumber:Number = 0; 
var interval:Number = setInterval(someFunction, 1000); 

someFunction():Void 
{ 
    container.instanceID.hello(); 
    runOnceNumber++; 

    clearInterval(interval); 
} 

Ce que vous devez faire est soit configurer le MovieClip avec la fonction intégrée pour diffuser un événement lorsque vous êtes prêt et d'écouter de la principale, ou quelque chose comme setInterval qui n'a besoin que probablement une tique. Je l'ai testé avec setInterval et ça a marché d'abord. Encore une fois vous devez attendre jusqu'à ce que "INITIALIZED" signifie que tout son code sur l'image 1 est chargé et disponible. Envisagez ActionScript 3 car avec son flux piloté par les événements, des choses comme celles-ci sont très simples.

+0

Votre réponse m'a vraiment aidé, j'oubliais d'attendre l'initiation. Merde ces appareils intégrés qui ne supportent que AS2! – nMoncho

Questions connexes