Я новичок в AS3 и пытаюсь понять, как внешне загруженные SWF работают в AS3. Начиная с Flash 4/5, в веб-проекте Flash часто было один основной файл SWF, а затем в него загружались другие файлы SWF, часто для различных «разделов» веб-сайта или веб-проекта. В основном файле у нас были бы маски, анимирующие мувиклип контейнера (в который были загружены внешние разделы / SWF-файлы), а также анимация и переходы, воспроизводимые после завершения загрузки раздела и отображения загруженного содержимого.
В AS3 я использовал класс Loader для загрузки и отображения внешнего файла, Моя основная проблема заключается в связи с загруженным контентом, вызове его функций или вызове корневых функций из него.
В AS2 мы могли бы использовать someMovieClip.loadMovie («ExternalContent.swf»), и файл ExternalContent загружался бы внутри someMovieClip. Вы можете получить доступ к функциям на основной временной шкале "External.swf", используя someMovieClip.function () ;. А внутри «ExternalContent.swf» мы могли бы использовать _root.function () для доступа к функциям в основном файле, в который загружался ExternalContent. Делать это в AS3 кажется странным и невротичным, и я чувствую, что упускаю что-то довольно простое.
//Loading in ExternalContent.swf into the sprite
//ExternalContent has a movieclip called "boxes" on it's main timeline
//boxes has a boxesPrompt() function in it's timeline.
var sprite:Sprite = new Sprite();
addChild(sprite);
var loader:Loader = new Loader();
loader.load(new URLRequest("ExternalContent.swf"));
loader.contentLoaderInfo.addEventListener(Event.COMPLETE,onLoaded);
function onLoaded(event:Event):void
{
sprite.addChild(event.target.content);
sprite.boxes.boxesPrompt();
//Flash gives the following compiler error at the above
//Scene 1, Layer 'Layer 1', Frame 1, Line 21 1119: Access of possibly undefined property boxes through a reference with static type flash.display:Sprite.
//But when I comment out sprite.boxes.boxesPrompt() and use this, it works:
event.target.content.boxes.boxesPrompt()
}
Функция boxesPrompt () внутри "ExternalContent.swf" просто отслеживает своего родителя, прародителя и прародителя - trace (this.parent.parent.parent) ;. И когда я вызываю эту функцию внутри обработчика события onLoaded с помощью «event.target.content.boxes.boxesPrompt ()», это показывает, что объект Boxes (который находился на главной временной шкале External.SWF) имеет родительский мувиклип , спрайт прародителя и объект прародителя mainTimeline.
Я думал, что переопределение загруженного контента в спрайте позволит мне получить доступ к загруженному контенту так же легко, как это делал loadMovie () - доступ к загруженному контенту, как если бы он присутствовал непосредственно внутри клипа, в который он был загружен. Но это не работает вообще.
Итак, перефразируя, мой вопрос:
Как мне связаться с основным SWF-файлом "загрузчика" с загруженным содержимым. Я не хочу общаться с помощью event.target.content. {Etc}, потому что тогда я буду только возможность обратиться к загруженному контенту в обработчике события Loader event.complete.
Как мне «переопределить» загруженный контент, чтобы я мог поместить его в некоторый фрагмент ролика / спрайта на основной временной шкале файла загрузчика, а не использовать какой-нибудь действительно длинный извилистый способ.
Как связаться с загруженным содержимым внутри основного / загрузочного файла. Ранее мы использовали функцию _root.functionName (), чтобы воспроизводить анимацию, переходя из текущего загруженного извне «раздела» в другой раздел. Как я это делаю?