AS3: Как использовать фрейм-скрипты в загруженной SWF-анимации? - PullRequest
0 голосов
/ 05 октября 2010

Я пытаюсь использовать addFrameScript() для анимации SWF, которую я загрузил, но столкнулся с несколькими проблемами. Вот что работает прямо сейчас:

public function project() {
    var loader:Loader = new Loader();
    loader.load(new URLRequest("animation.swf"));
    loader.contentLoaderInfo.addEventListener(Event.COMPLETE, animLoadComplete, false, 0, true);
}

private function animLoadComplete(e:Event):void {
    anim = e.target.content as MovieClip;
    addChild(anim);
    //anim.addFrameScript(anim.totalFrames - 1, animEnd);
}

private function animEnd():void {
    trace("animEnd");
}

Таким образом, анимация воспроизводит плавник и просто повторяется снова и снова.

Проблема, похоже, заключается в том, что анимация запускается независимо от использования stop(), play() или какой-либо функции анимации. A trace(anim.totalFrames) также показывает, что моя анимация состоит из 2 кадров, а не 23 (что так и есть).

Когда я отменяю комментарий anim.addFrameScript(anim.totalFrames - 1, animEnd); сценарий кадра, кажется, вызывается каждый кадр, и анимация перестает воспроизводиться и вместо этого заменяется флэш-памятью "точки загрузки", где она должна появляться.

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

Ответы [ 2 ]

0 голосов
/ 03 мая 2011
var oldFrameActions:Function = function():void {};

if((mc['frame23'] != null) && (mc['frame23'] is Function))
{
oldFrameActions = mc['frame23'];
}

var newFrameActionsFrame23:Function = function():void {
oldFrameActions();
// add new code here...
}
0 голосов
/ 06 октября 2010

путь / ссылка для этого stop () может быть сложным при использовании этого материала.

Я создал несколько утилит, чтобы упростить их, потому что я делал это много - утилиты также занимаются сохранением существующего кода:http://flair -flash-flex-air.blogspot.com / 2010/07 / using-actionscript-3-to-inject-code.html

Есть ссылка на сутьклассы util, которые я создал в этой статье.

Но тот факт, что ваш загруженный SWF-файл отслеживает наличие 2 кадров вместо ожидаемых 23, как вы заметили, вызывает беспокойство!Я ожидаю, что это вызывает вашу видимую проблему (код, отслеживающий «каждый кадр»), как будто у вас есть только 2 кадра, тогда ваш скрипт будет работать на альтернативных кадрах.

Вы пробовали прослушивать INIT вместоПОЛНОЕ?Я обычно нахожу это более надежным, если я хочу использовать содержимое SWF.Также вам (в зависимости от вашего родительского swf) может потребоваться установить SecurityDomain свойства LoaderContext (вы передадите его, когда выполните загрузку () - для получения более подробной информации обратитесь к документации AS3 для Loader).

...