Вызов функции, определенной в MovieClip - ActionScript 2

У меня есть фрагмент ролика, который прикреплен к attachMovieClip, и в нем есть функция под названием test ()

///

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

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

Ответов (3)

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

Удачи!

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

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

Выгер

Прошло много времени с тех пор, как я использовал 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, потому что с его потоком, управляемым событиями, подобные вещи очень просты.