我是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();
由于
答案 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)
通常,您应该将所有事件侦听器及其调用的函数放在主类中。就是这样。