AS3中MovieClip按钮切帧逻辑else语句不生效问题咨询
问题核心原因
你写的判断逻辑存在本质缺陷,导致else分支永远无法命中:
- 你只给
btn1这一个元件绑定了点击监听,所有触发的点击回调中,e.currentTarget始终是绑定了监听的btn1本身,读取到的namebtn值永远等于字符串"btn1" - 这就导致
if (namebtn == "btn1")的判断条件100%每次都为真,else分支从代码逻辑上就没有任何被执行的可能,这就是else代码完全不生效的根本原因。
正确实现方案
你需要实现的是「第一次点击跳下一帧、第二次点击跳回上一帧」的交替交互,根本不需要靠比对按钮名称拆分支,只要给按钮加一个独立的状态标记,记录下一次点击的跳转方向即可,完整可运行的代码如下:
btn1.stop(); // 状态标记:记录按钮是否已经完成了第一次下跳操作 var hasNextJumped:Boolean = false; btn1.addEventListener(MouseEvent.CLICK, clicked); function clicked(e: MouseEvent): void { // 将当前触发事件的对象强转为MovieClip类型,规避类型报错 var targetMc:MovieClip = e.currentTarget as MovieClip; // 根据状态标记执行对应跳转 if (hasNextJumped) { targetMc.prevFrame(); } else { targetMc.nextFrame(); } // 反转状态,为下一次点击的跳转方向做准备 hasNextJumped = !hasNextJumped; }
实现注意事项
- 从
e.currentTarget取值时必须做类型强转:MouseEvent的currentTarget默认是基础DisplayObject类型,本身没有nextFrame()、prevFrame()这类帧跳转方法,只有强转为MovieClip类型才能正常调用对应API。 - 单按钮场景下不要依赖按钮名称做分支判断:同一个绑定了监听的按钮,每次触发回调时的name属性是固定不变的,这类判断在单按钮交互中没有任何实际作用。
- 如果后续要给多个独立按钮复用同一套点击逻辑,需要给每个按钮单独维护对应的状态值,不能用全局的单一状态标记,否则多个按钮之间的交互状态会互相干扰。
内容的提问来源于stack exchange,提问作者Ahlan
相关产品推荐
相关产品推荐

