2009-02-27 2 views
0

У меня есть клип, который присоединен с attachMovieClip, и она имеет функцию в нем под названием Test()Вызов функции, которая определена в MovieClip - ActionScript 2

///

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

после прикрепления клипа я пытался назвать эту функцию, но я просто не мог. Есть ли простое решение для этого? Я читал что-то о вас, вы не можете вызвать функцию до тех пор, пока клип не будет полностью загружен ... есть ли простое решение для этого?

+0

Вы можете вызвать функцию после загрузки фильма? – dirkgently

+0

Как вы называете эту функцию? Вы делаете это через экземпляр мувиклипа? –

ответ

1

Убедитесь, что ваша функция «тест» определена в первом кадре временной шкалы MovieClip. Затем используйте обработчик MovieClip.onLoad для захвата, когда MovieClip готов принимать вызовы функций. После этого вы сможете называть «тест» в своем клипе.

Удачи вам!

+0

Странно. когда вы не можете использовать функцию in-movieclip (как вы упомянули, я должен подождать немного), я могу получить доступ к внутреннему элементу и установить их положение и .... Я предпочитаю делать то, что я сделал в своей функции, не используя функцию (и вручную), чтобы избежать использования onLoad(). – Emadpres

+0

@ seedpod.mp Если у меня много мувиклипов на сцене, как я могу убедиться, что все они загружены и готовы к инициализации (= и их функция доступна мне)? – Emadpres

1

Вы можете определить функцию вне мувиклипа на главной временной шкале. Затем, прикрепив ее (через attachMovie), вы можете передать его через InitObject (четвёртая параметр):

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

Это было время, так как я использовал AS2, в AS3 пород, но я считаю, что вам нужно указать идентификатор экземпляра в прикрепленный видеоклип. И вам также нужно подождать, пока фильм не будет готов.

//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); 
} 

Что вам нужно сделать, это либо настроить MovieClip со встроенной функцией транслировать событие, когда готовы и слушать его от главного, или что-то вроде setInterval, который только, вероятно, нуждается в один тик. Я тестировал его с помощью setInterval, и сначала он работал. Снова вам нужно подождать, пока оно «ИНИЦИАЛИЗИРОВАНО» означает, что весь его код на кадре 1 загружен и доступен. Рассмотрим ActionScript 3, потому что с потоком, управляемым событиями, такие вещи очень легко.

+0

Ваш ответ действительно помог мне, я забыл дождаться посвящения. Черт, это встроенные устройства, которые поддерживают только AS2! – nMoncho