AS3 Key Down事件监听器不起作用?

时间:2013-02-27 20:36:52

标签: actionscript-3

我是AS3的OOP编程新手, 我正在尝试创建一个在按下按键时响应的侦听器。

当我在时间轴上输入它时它工作正常,但是现在当它在它自己的包上时根本没有响应,我做错了什么?

package{
    import flash.events.KeyboardEvent;
    import flash.display.Sprite;

    public class PlayerController extends Sprite{
        public function PlayerController(){
            addEventListener(KeyboardEvent.KEY_DOWN,onButDown);
        }
        function onButDown(event:KeyboardEvent):void{
            trace("Key Down");
        }
    }

}

在主要课程中我有这个:

var pc:PlayerController = new PlayerController();

由于

2 个答案:

答案 0 :(得分:1)

你的问题可能是PlayerController的实例没有获得焦点(并且永远不会,因为它看起来不像你将它添加到显示列表)。如果对象没有焦点,则无法接收键盘事件。

一种解决方案是在构造函数中传递对stage的引用,然后将事件侦听器添加到其中:

package
{
    import flash.events.KeyboardEvent;
    import flash.display.Sprite;

    public class PlayerController extends Sprite{
        public function PlayerController($stageRef:Stage){
            $stageRef.addEventListener(KeyboardEvent.KEY_DOWN,onButDown);
        }
        function onButDown(event:KeyboardEvent):void{
            trace("Key Down");
        }
    }

}

然后,在您的主应用程序中:

var pc:PlayerController = new PlayerController(stage);

编辑添加:假设stage不是null。在以这种方式实例化PlayerController之前,您需要确保这一点。

答案 1 :(得分:0)

通常,您应该将所有事件侦听器及其调用的函数放在主类中。就是这样。