为什么KeyboardEvent监听器(AS3)在我将其添加到舞台之前没有反应,而不是在我将其简单地写入文档类时,就像我对其他任何函数一样?我的意思是,我必须写
stage.addEventListener(KeyboardEvent.KEY_DOWN, someFunc);
而不仅仅是
addEventListener(KeyboardEvent.KEY_DOWN, someFunc);
就像我和其他人一样?
答案 0 :(得分:2)
你实际上可以......但在你需要将stage.focus定义为你想要侦听KeyboardEvent.KEY_DOWN事件的对象之前。
stage.focus = this
this.addEventListener(KeyboardEvent.KEY_DOWN, someFunc);
在as3 reference guide中,您可以看到有关KeyboardEvent的更多信息:
要全局聆听关键事件,请在舞台上聆听捕捉和目标或泡沫阶段。
如果你想在TextField上监听KeyboardEvent,这非常有用,例如:
text_tf.addEventListener(KeyboardEvent.KEY_DOWN, someFunc);
希望这能澄清你的怀疑。
答案 1 :(得分:0)
我使用Flex和Actionscript3在Flashbuilder 4.6中遇到了这个问题。我只是发布这个以防其他人想要替代解决方案,因为这个解决方案对我不起作用。
这就是我所做的:
public class CoreContainer extends Canvas implements IFocusManagerContainer, IFocusManagerComponent
{
private var _focus:FocusManager = new FocusManager(this as IFocusManagerContainer);
public function CoreContainer()
{
...
this._focus.setFocus(this);
this.addEventListener(KeyboardEvent.KEY_DOWN, this.handleKeyDown);
...
}
private function handleKeyDown(event:KeyboardEvent):void
{
KeyboardShortcuts.handleKeyDown(event);
}
}
基本上我和a-m做了同样的事情,但由于我无法在flex中访问stage作为全局变量,因此我可以为这个特定的类访问它。