Actionscript 3 AS3键关闭事件侦听器不';不行?
我不熟悉AS3的OOP编程, 我正在尝试创建一个当按键时会响应的侦听器 当我只是在时间轴中输入它时,它工作得很好,但是现在当它在自己的包中时,它根本没有响应,我做错了什么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
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
,因此对于构造函数的范围,您将覆盖它。