Первое, что я заметил, было то, что в родительском элементе вы указываете событие с именем initAsLoaded
, а в дочернем элементе вы отправляете событие с именем childLoaded
. Прослушивание события, которое никогда не будет отправлено, может быть плохой идеей.
Однако проблема не в этом, потому что исправление событий не решает проблему. Основная проблема заключается в том, что событие onLoadInit
из MovieClipLoader
отправляется после того, как был выполнен код первого кадра child.swf. Это означает, что в child.swf вы отправляете событие в первом кадре, который тоже никто не слушает, потому что onLoadInit
еще не был вызван.
Чтобы исправить это, вы можете начать отправлять события в child.swf только со второго кадра и далее.
Родительский первый кадр:
var rotator_mc = _root.createEmptyMovieClip("rotator_mc", _root.getNextHighestDepth() );
_mcl = new MovieClipLoader();
_mcl.addListener(this);
_mcl.loadClip("child.swf", rotator_mc);
function onLoadComplete(clip) {
trace("onLoadComplete " + clip + ", " + clip.addEventListener );
clip.addEventListener("initAsLoaded", function() {trace("childLoaded loaded 1")});
}
function onLoadInit(clip) {
trace("onLoadInit " + clip + ", " + clip.addEventListener );
clip.addEventListener("initAsLoaded", function() {trace("childLoaded loaded 2")});
}
Это моя версия первого кадра вашего родителя. Мне пришлось создать пустой фрагмент ролика, который будет служить контейнером, и я добавил несколько следов в обработчики событий.
Первый кадр ребенка:
import mx.events.EventDispatcher;
EventDispatcher.initialize( this );
Второй кадр ребенка:
stop();
this.dispatchEvent({type:"initAsLoaded", target: this});
trace("Child dispatching: childLoaded");
Надеюсь, это поможет ...