为什么我的KEY_DOWN事件没有触发?

时间:2014-07-02 23:10:04

标签: actionscript-3 events flashdevelop

我是ActionScript的新手,并且正在按照教程here开始使用FlashDevelop。我将其设置为每次KEY_DOWN事件移动项目而不是使用框架事件,但我的KEY_DOWN事件永远不会被触发。我很快添加了一个MOUSE_DOWN事件来测试问题的严重程度。

我正在添加侦听器,因为我的Paddle(Sprite的扩展名)项目已添加到舞台中:

private function addedToStage(e:Event) : void {
    // Remove this event listener
    removeEventListener(Event.ADDED_TO_STAGE, addedToStage);

    // Add the picture
    addChild(pic);

    // Set the location of the item in the middle of the screen one
    // height length of the image down.
    this.y = this.height;
    this.x = (this.stage.stageWidth - this.width) / 2;

    // Add the keyboard listener (broken).
    stage.addEventListener(KeyboardEvent.KEY_DOWN, this.keyDownHandler, false, 0, true);

    // Add the mouse listener (works).
    stage.addEventListener(MouseEvent.MOUSE_DOWN, this.mouseDown, false, 0, true);

    // Set the focus to the stage.
    stage.focus = stage;
}

我的keyDownHandler函数中有一个断点,它永远不会被调用。

这可能是this question的副本,但我已经在做了该问题的答案所描述的内容,在评论中他解释说,他不知道是什么解决了问题,只是突然开始工作。< / p>

该问题的另一个流行答案提到this article这就是为什么我的代码中有一行将焦点重新设置到舞台上。我的舞台上没有别的东西。

可能会发生什么?

修改

这是我的听众代码:

private function keyDownHandler(e:KeyboardEvent):void {
    var increment:Number; // Here is my breakpoint
    if (e.keyCode == 65 || e.keyCode == 37) {
        increment = -5;
    } else if(e.keyCode == 68 || e.keyCode == 39) {
        increment = 5;
    }
    var newX:Number = this.x + 5;
    if (newX > 0 && newX + this.width < this.stage.width) {
        this.x = newX;
    }
}

1 个答案:

答案 0 :(得分:3)

问题与事件本身无关,而是我如何测试它是否被解雇。您不能在声明上放置断点。

FlashDevelop将允许您在那里设置断点,但调试器实际上不会在此时停止。

移动拨片的代码不起作用(此时对我来说并不奇怪),但如果我将断点移动到if语句中的行(或执行实际操作时的任何其他行,例如跟踪)突然它打破了。现在我想起来,即使我使用过的其他语言都有这种行为,我对IDE的过于宽容,会在这种情况下将断点移到最近的可用行。 / p>