我正在尝试在我加载的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);
时,框架脚本似乎每帧被调用,并且动画停止播放,而是被闪存“加载点”取代,它应该出现在那里。
我想我的问题是双重的。我是否正确加载动画,为什么一个脚本会导致我的动画消失?
答案 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...
}