事件触发时为什么不调用事件侦听器函数?

时间:2015-03-01 10:58:45

标签: actionscript-3 keyboard-events

我在class Player内有这个:

    public static function initClass():void {
        Player.loadPlayerSprite();
        Player.magnifyPlayerSpriteByNtimes(5);
        Player.playerSprite.addEventListener(KeyboardEvent.KEY_DOWN, onKeyDown);

        function onKeyDown(e:KeyboardEvent):void {
            switch (e.keyCode) {
                case Keyboard.RIGHT: moveRight();
                case Keyboard.LEFT: moveLeft();
                case Keyboard.DOWN: moveDown();
                case Keyboard.UP: moveUp();
            }
        }
    }

问题是,当我按下键盘时,为什么不调用函数onKeyDown()。 您可能想知道为什么函数onKeyDown()在函数initClass()内。它曾经是一个私人静态功能,但它没有工作,所以我把它放在initClass()但它也没有用。谢谢你的进步。

1 个答案:

答案 0 :(得分:2)

您似乎正在向Player.playerSprite对象添加事件侦听器。因此,只有Player.playerSprite对象可以调用此侦听器。

如果您想全局附加您的监听器,请尝试以下方法:

public static function initClass(): void {
    Player.loadPlayerSprite();
    Player.magnifyPlayerSpriteByNtimes(5);
    //add listener to stage
    stage.addEventListener(KeyboardEvent.KEY_DOWN, onKeyDown);
}

private static function onKeyDown(e: KeyboardEvent): void {
    //do whatever you want
}

如果您想将听众附加到Player.playerSprite,请尝试关注此对象:

public static function initClass(): void {
    Player.loadPlayerSprite();
    Player.magnifyPlayerSpriteByNtimes(5);
    //focus the object
    stage.focus = Player.playerSprite;
    Player.playerSprite.addEventListener(KeyboardEvent.KEY_DOWN, onKeyDown);
}

private static function onKeyDown(e: KeyboardEvent): void {
    //do whatever you want
}