为什么KeyboardEvent侦听器(AS3)在我将其添加到舞台之前不会做出反应?

时间:2011-08-27 10:14:42

标签: actionscript-3 flash events

为什么KeyboardEvent监听器(AS3)在我将其添加到舞台之前没有反应,而不是在我将其简单地写入文档类时,就像我对其他任何函数一样?我的意思是,我必须写

stage.addEventListener(KeyboardEvent.KEY_DOWN, someFunc);

而不仅仅是

addEventListener(KeyboardEvent.KEY_DOWN, someFunc);

就像我和其他人一样?

2 个答案:

答案 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作为全局变量,因此我可以为这个特定的类访问它。