ActionScript如何解决Key.isDown按住连续触发导致Flash漫画帧快速跳转问题
问题原因
你当前使用的Key.isDown会在onEnterFrame每次触发时(通常每秒24~60次)持续检测按键状态,只要按键处于按住状态就会执行跳转逻辑,所以单次按键会触发多次跳转,直接跳完所有帧。
解决方法1:添加按键锁定变量(兼容现有逐帧代码结构)
你只需要新增一个标记变量,记录按键是否已经被响应过,只有按键松开后再次按下才会触发新的跳转,适配你现有的逐帧写代码的逻辑:
- 第1帧代码修改为:
stop(); var keyLocked:Boolean = false; onEnterFrame = function(){ // 仅按键按下且未被锁定时执行跳转 if(Key.isDown(Key.RIGHT) && !keyLocked){ keyLocked = true; gotoAndStop(2); } // 按键松开时解除锁定 if(!Key.isDown(Key.RIGHT) && !Key.isDown(Key.LEFT)){ keyLocked = false; } }
- 第2帧代码修改为:
stop(); onEnterFrame = function(){ if(Key.isDown(Key.RIGHT) && !keyLocked){ keyLocked = true; gotoAndStop(3); } if(Key.isDown(Key.LEFT) && !keyLocked){ keyLocked = true; gotoAndStop(1); } if(!Key.isDown(Key.RIGHT) && !Key.isDown(Key.LEFT)){ keyLocked = false; } }
后续所有帧都按照这个格式修改即可,只需要在跳转条件里加&& !keyLocked,再补充按键松开的解锁判断就行。
解决方法2:全局统一控制逻辑(无需逐帧写重复代码)
直接把所有交互逻辑写在第1帧,后续所有帧仅保留stop()即可,不用再写重复的事件代码,更易维护:
stop(); var totalFrames:Number = this._totalframes; // 自动获取漫画总帧数 // 用按键按下事件替代帧检测,天然只在按键按下瞬间触发一次 Key.onDown = function(){ switch(Key.getCode()){ case Key.RIGHT: // 未到最后一帧时跳转到下一帧 if(_currentframe < totalFrames){ gotoAndStop(_currentframe + 1); } break; case Key.LEFT: // 未到第一帧时跳转到上一帧 if(_currentframe > 1){ gotoAndStop(_currentframe - 1); } break; } }
这个方案逻辑更简洁,Key.onDown事件只会在按键按下的瞬间触发一次,按住不会重复触发,刚好匹配你的需求。
内容的提问来源于stack exchange,提问作者anonymous
相关产品推荐
相关产品推荐

