AS3:如何在加载的swf动画上使用框架脚本?

时间:2010-10-05 15:48:02

标签: actionscript-3 animation flash loader

我正在尝试在我加载的SWF动画上使用addFrameScript(),但遇到了一些问题。这是现在可行的:

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");
}
像这样,动画播放fin并且一遍又一遍地循环播放。

麻烦似乎是无论使用stop()play()还是任何动画功能,动画都会运行。 trace(anim.totalFrames)还显示我的动画是2帧而不是23帧(它是)。

当我取消评论anim.addFrameScript(anim.totalFrames - 1, animEnd);时,框架脚本似乎每帧被调用,并且动画停止播放,而是被闪存“加载点”取代,它应该出现在那里。

我想我的问题是双重的。我是否正确加载动画,为什么一个脚本会导致我的动画消失?

2 个答案:

答案 0 :(得分:0)

使用这些东西时,

该停止()的路径/引用可能会很棘手。

我构建了一些实用程序以使其更容易,因为我做了很多 - utils也处理保留现有代码:http://flair-flash-flex-air.blogspot.com/2010/07/using-actionscript-3-to-inject-code.html

这是我在文章中创建的util类的要点的链接。

但事实上,你加载的swf跟踪的是2帧而不是你期望的23帧 - 正如你所注意到的那样 - 令人担忧!我希望这会导致你的可见问题(代码跟踪'每一帧'),好像你只有2帧,然后你的脚本将在备用帧上运行。

您是否尝试过侦听INIT而不是COMPLETE?如果我想使用swf的内容,我通常会发现这更可靠。你也可以(取决于你的父swf)需要设置LoaderContext属性的SecurityDomain(当你执行load()时你会传入它 - 查看有关Loader的AS3文档以获取更多详细信息)。

答案 1 :(得分:0)

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...
}