代码之家  ›  专栏  ›  技术社区  ›  Pedro Henrique

如何在Flash上正确使用KeyboardEvent

  •  0
  • Pedro Henrique  · 技术社区  · 11 年前

    在我开始的游戏中,我有一个KeyboardEvent问题。我有三个类,一个用于处理级别,一个是实际级别,另一个用于表示化身:

    数量

    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=这是在阿凡达上,但如果我在游戏执行过程中点击其他地方,焦点就会丢失,不再有效。有人能帮我吗?

    提前谢谢

    2 回复  |  直到 5 年前
        1
  •  1
  •   Marty    11 年前

    键盘事件只有在指定给它们的对象是当前焦点时才会触发。

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

    stage.addEventListener(KeyboardEvent.KEY_DOWN, apertou);
    
        2
  •  0
  •   Barış Uşaklı    11 年前

    你可以将密钥处理程序从化身移动到关卡或舞台,然后将你的化身移动到那里。

    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++;
            }
        }
    
    }