FLASH 全面了解一下addFrameScript的用法
1.??适用范围:addFrameScript用于给MovieClip对象添加帧代码。 flash.display.MovieClip.addFrameScript(...parameters):void
可以看出需要传入动态参数,这个参数列表必须是偶数个。 mc.addFrameScript(frameIndex,function);
其中frameIndex就是你要加入帧脚本的帧。 public class DemoClass { var mc:MovieClip; //mc是多帧动画 public function DemoClass() { // todo 在这里创建mc实例 .... //这条语句给第一帧加入了帧代码,0代表第一帧。 mc.addFrameScript(0,traceFrame()); //给最后一帧添加帧代码 mc.addFrameScript(mc.totalFrames - 1,traceFrame()); } private function traceFrame():void { trace('currentFrame: ' + mc.currentFrame + ' / ' + 'totalFrames: ' + mc.totalFrames); } } 输出结果是: currentFrame: 1 / totalFrames: 34 currentFrame: 1 / totalFrames: 34
?
虽然动画在内存中不断循环播放,但是帧代码只执行了一次,而且都是在第一帧执行的。显然这是没法用的,很多人容易犯这个错误,直接给帧代码一段执行函数。第二个参数要传递函数的类型,而不是引用。
修改其中两句为: mc.addFrameScript(0,traceFrame);//这条语句给第一帧加入了帧代码,0代表第一帧。 mc.addFrameScript(mc.totalFrames - 1,traceFrame);//给最后一帧添加帧代码 代码已经在正确的帧执行:
?
currentFrame: 1 / totalFrames: 34 currentFrame: 34 / totalFrames: 34 currentFrame: 1 / totalFrames: 34 currentFrame: 34 / totalFrames: 34 currentFrame: 1 / totalFrames: 34 ...... mc.addFrameScript(0,function1,1,function2,.... mc.totalFrames - 1,functionX); 注意: 1). 对同一帧重复添加帧代码,新的帧代码会自动替换旧的。 2). 通过jellyfish.addFrameScript(frameIndex,null)的方法可以清除frameIndex帧的代码。 3). 如果参数不匹配会报错: jellyfish.addFrameScript(0,1); Error #2001: 指定的参数太少;当前为 3,应该为 4。 4). 如果frameIndex不是数字,默认给第一帧添加帧代码。如果与某一帧对应的代码不是合法的函数类型,而是执行语句,则会在第一帧执行之前执行一遍。 5). 如果给不合法帧添加代码,则都会自动过滤 mc.addFrameScript( -100,innerFunc,mc.totalFrames - 1,100,innerFunc ); 复制代码
? 这一段给-100,100帧添加帧代码的语句会被无视。中间两条能正常执行。 public class DemoClass { public function DemoClass() { var mc:MovieClip; //mc是多帧动画 .... mc.addFrameScript(0,function():void { execute.call(null,mc); }); } private function execute(_mc:MovieClip):void { //对_mc的操作 } }
或者用这种形式就不需要把参数传递过去了: public class DemoClass { public function DemoClass() { var mc:MovieClip; //mc是多帧动画 .... function execute():void { //对mc的操作 } mc.addFrameScript(0,execute); } }
? 4. 不推荐使用addFrameScript,addFrameScript是flash的隐藏方法,与EnterFrame在底层实现机制是一样的。EnterFrame事件完全能够实现它所能做的事情,可能写起来代码会稍微多几行。就像setTimeOut能够完全被Timer替代一样。 ? ? 所以最好还是不要用addFrameScript了。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |