0

我是使用 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();

谢谢

4

2 回答 2

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在以这种方式实例化之前,您需要确保这一点。

于 2013-02-27T20:56:25.363 回答
0

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

于 2013-02-27T20:54:54.707 回答