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

Why is not event listener function called when event fired?

我里面有这个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() 中,但它也没有用。感谢提前。

您似乎正在将事件侦听器添加到 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
}