Flash ActionScript 3.0 KeyUp 和 KeyDown 方法错误

Flash ActionScript 3.0 KeysUp & KeysDown method error

具有以下游戏节目软件代码:

  1. 允许用户按下按钮并切换到特定的框架。
  2. 空格键设置为 "reset button" 将用户带回原始框架 1。

当前问题:空格键会将用户带回到上一帧(第 2、3 或 432 帧)。但是按空格键两次会恢复到第 1 帧。

不明白为什么。

stage.addEventListener(KeyboardEvent.KEY_DOWN, keysDown);
stage.addEventListener(KeyboardEvent.KEY_UP, keysUp);
var value:Number;

function keysUp(event:KeyboardEvent){

 if(event.keyCode == Keyboard.SPACE) {
  gotoAndStop(1);
 }
if(event.keyCode == Keyboard.A) {
  gotoAndStop(4);
  stage.removeEventListener(KeyboardEvent.KEY_DOWN, keysDown);
}
if(event.keyCode == Keyboard.Z) {
  gotoAndPlay(5);
  stage.removeEventListener(KeyboardEvent.KEY_DOWN, keysDown);
}
if(event.keyCode == Keyboard.X) {
  gotoAndPlay(66);
  stage.removeEventListener(KeyboardEvent.KEY_DOWN, keysDown);
}
}

function keysDown(event:KeyboardEvent){

 if(event.keyCode == Keyboard.SPACE) {
  value = 1;
 }
 if(event.keyCode == Keyboard.LEFT) {  
  value = 2;
 }
 if(event.keyCode == Keyboard.RIGHT) {  
  value = 3;
 }

 if (value == 1){
 gotoAndStop(1);
 }
 if (value == 2){
 gotoAndStop(2);
 stage.removeEventListener(KeyboardEvent.KEY_DOWN, keysDown);
 }
 if (value == 3){
 gotoAndStop(3);
 stage.removeEventListener(KeyboardEvent.KEY_DOWN, keysDown);
 }
}

你真的不需要那么多监听器,如果你只想在按下键时设置一个值并在按下键时转到一个帧,那么你可以执行以下操作。

stage.addEventListener(KeyboardEvent.KEY_DOWN, keyDownHandler);
stage.addEventListener(KeyboardEvent.KEY_UP, keyUpHandler);
var value:Number;
stop();

function keyDownHandler(event:KeyboardEvent){
    switch (event.keyCode) {
        case Keyboard.SPACE:
            value = 1;
            break;
        case Keyboard.LEFT:
            value = 2;
            break;
        case Keyboard.RIGHT:
            value = 3;
            break;
    }
}

function keyUpHandler(event:KeyboardEvent){
    this.gotoAndStop(value);
}

如果你想在 keydown 上更改帧,那么你需要一个像 on enterframe 这样的常规事件侦听器,以避免连续触发 keyDown 事件来检查值的变化,如:

stage.addEventListener(KeyboardEvent.KEY_DOWN, keyDownHandler);
stage.addEventListener(Event.ENTER_FRAME, update);

var value:Number = 0;
stop();

function keyDownHandler(event:KeyboardEvent){
    switch (event.keyCode) {
        case Keyboard.SPACE:
            value = 1;
            break;
        case Keyboard.LEFT:
            value = 2;
            break;
        case Keyboard.RIGHT:
            value = 3;
            break;
    }
}

function update(event){
    this.gotoAndStop(value);
}