Actionscript 3 AS3键关闭事件侦听器不';不行?

Actionscript 3 AS3键关闭事件侦听器不';不行?,actionscript-3,Actionscript 3,我不熟悉AS3的OOP编程, 我正在尝试创建一个当按键时会响应的侦听器 当我只是在时间轴中输入它时,它工作得很好,但是现在当它在自己的包中时,它根本没有响应,我做错了什么 package{ import flash.events.KeyboardEvent; import flash.display.Sprite; public class PlayerController extends Sprite{ public function PlayerCo

我不熟悉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();

谢谢

一般来说,您应该将所有事件侦听器及其调用的函数放在主类中。仅此而已。

您这里的问题可能是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);

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

我也尝试将其放在主类中,但它不起作用。。你看到当前代码中有什么错误吗?谢谢,它似乎像我希望的那样工作:),顺便说一下,没关系,我写对了公共函数PlayerController(stage:stage)将正常工作,但Sprite已经有一个公共属性
stage
,因此对于构造函数的范围,您将覆盖它。