Flash CS3动画倒放技术求助:时间轴反转代码失效
Flash CS3 时间轴倒放&快放功能修复方案
看了你贴的代码片段,能发现几个导致功能失效的核心问题,我帮你梳理并修正:
原代码的问题点
- AS3里没有
on("tick")这种事件写法,正确的帧循环事件是Event.ENTER_FRAME - 点击快进/倒放按钮时,没有移除之前的帧监听,会导致两个功能同时触发冲突
- 你贴的
ffwd和rewind函数都不完整,缺少关键的帧跳转逻辑 - 函数绑定的作用域处理可以更严谨,避免
this指向错误
修正后的完整代码
把这段代码放到主时间轴的第一帧上(确保fwd_btn和rew_btn是舞台上的按钮实例名):
import flash.events.Event; import flash.events.MouseEvent; // 标记是否已经添加了帧监听,避免重复绑定 var isPlaying:Boolean = false; var currentPlayDirection:String = ""; // 快进按钮点击事件 fwd_btn.addEventListener(MouseEvent.CLICK, onForwardClick); // 倒放按钮点击事件 rew_btn.addEventListener(MouseEvent.CLICK, onRewindClick); function onForwardClick(e:MouseEvent):void { // 先移除之前的帧监听,防止冲突 removeFrameListeners(); currentPlayDirection = "forward"; addEventListener(Event.ENTER_FRAME, playForward); } function onRewindClick(e:MouseEvent):void { removeFrameListeners(); currentPlayDirection = "rewind"; addEventListener(Event.ENTER_FRAME, playRewind); } // 快进逻辑:每帧前进1帧,到最后一帧停止 function playForward(e:Event):void { if (currentFrame < totalFrames) { gotoAndStop(currentFrame + 1); } else { removeFrameListeners(); } } // 倒放逻辑:每帧后退1帧,到第一帧停止 function playRewind(e:Event):void { if (currentFrame > 1) { gotoAndStop(currentFrame - 1); } else { removeFrameListeners(); } } // 通用移除帧监听的函数 function removeFrameListeners():void { removeEventListener(Event.ENTER_FRAME, playForward); removeEventListener(Event.ENTER_FRAME, playRewind); }
关键细节说明
- 每次点击按钮先调用
removeFrameListeners(),确保同一时间只有一个播放方向的逻辑在运行 - 使用
Event.ENTER_FRAME实现每帧的状态更新,这是AS3里实现帧循环的标准方式 - 加入了边界判断:快进到最后一帧、倒放到第一帧时自动停止,避免报错
- 按钮事件绑定用标准的
addEventListener写法,避免作用域混乱
这样修改后,你测试一下快进和倒放按钮,应该就能正常控制时间轴了~
内容的提问来源于stack exchange,提问作者Jane Doe
相关产品推荐
相关产品推荐

