Actionscript 3 如何在Flash上正确使用KeyboardEvent

Actionscript 3 如何在Flash上正确使用KeyboardEvent,actionscript-3,flash,flash-cs5,Actionscript 3,Flash,Flash Cs5,在我开始的游戏中,我在使用键盘事件时遇到了问题。我有三个类,一个用于处理级别,一个是实际级别,一个表示化身: 级别 import flash.display.MovieClip; import flash.events.Event; public class Fase extends Cena { var avatar:Avatar; public function Fase() { // constructor code this.a

在我开始的游戏中,我在使用键盘事件时遇到了问题。我有三个类,一个用于处理级别,一个是实际级别,一个表示化身:

级别

import flash.display.MovieClip;
import flash.events.Event;

public class Fase extends Cena
{
    var avatar:Avatar;

    public function Fase()
    {
        // constructor code
        this.addEventListener(Event.ADDED_TO_STAGE, onAdded);
    }

    public function onAdded(e:Event)
    {
        avatar = new Avatar();
        this.addChild(avatar);
        avatar.x = stage.width/2;
        avatar.y = 30;

    }

    public function die()
    {
        this.removeEventListener(Event.ADDED_TO_STAGE, onAdded);
        (this.parent as ScreenHandler).removeChild(this);
    }

}
化身

public class Avatar extends MovieClip
{

    public function Avatar()
    {
        // constructor code
        this.addEventListener(Event.ADDED_TO_STAGE, onAdded);
    }

    public function onAdded(e:Event)
    {
        //stage.focus=this;
        this.addEventListener(KeyboardEvent.KEY_DOWN, apertou);
    }

    public function apertou(event:KeyboardEvent)
    {
        trace("o");
        if(event.keyCode == Keyboard.LEFT)
        {
            this.x++;
        }
    }

}
我在这两个类上都有所有的包,如果我使用这个舞台,所有的都可以工作。focus=这个在阿凡达上,但是如果我在游戏执行期间点击其他地方,那么focus就会丢失,不再工作。有人能帮我吗


提前感谢

您可以将钥匙处理程序从化身移动到关卡或舞台,然后将您的化身移动到关卡或舞台

public class Fase extends Cena
{
    var avatar:Avatar;

    public function Fase()
    {
        // constructor code
        this.addEventListener(Event.ADDED_TO_STAGE, onAdded);
    }

    public function onAdded(e:Event)
    {
        avatar = new Avatar();
        this.addChild(avatar);
        avatar.x = stage.width/2;
        avatar.y = 30;
        addEventListener(KeyboardEvent.KEY_DOWN, apertou);

    }

    public function die()
    {
        this.removeEventListener(Event.ADDED_TO_STAGE, onAdded);
        (this.parent as ScreenHandler).removeChild(this);
    }

    public function apertou(event:KeyboardEvent)
    {
        if(event.keyCode == Keyboard.LEFT)
        {
            avatar.x++;
        }
    }

}

键盘事件仅在指定给它们的对象是当前焦点时触发

幸运的是,默认情况下,
阶段始终具有焦点。这意味着您可以将事件侦听器添加到后台,以便始终按预期触发键盘事件:

stage.addEventListener(KeyboardEvent.KEY_DOWN, apertou);

谢谢你的回答,但它仍然只适用于舞台。请关注有键盘代码的课程。