0

開始しているゲームでKeyboardEventを機能させるのに問題があります。私には3つのクラスがあります。1つはレベルを処理するためのもので、もう1つは実際のレベルであり、もう1つはアバターを表すためのものです。

レベル

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

}

アバターでstage.focus=thisを使用すると、両方のクラスのすべてのパッケージがすべて機能しますが、ゲームの実行中に別の場所をクリックすると、フォーカスが失われ、機能しなくなります。誰か助けてもらえますか?

前もって感謝します

4

2 に答える 2

1

キーボードイベントは、割り当てられているオブジェクトが現在のフォーカスである場合にのみトリガーされます。

幸い、stageデフォルトでは常にフォーカスがあります。これは、イベントリスナーをステージに追加して、キーボードイベントを常に期待どおりにトリガーできることを意味します。

stage.addEventListener(KeyboardEvent.KEY_DOWN, apertou);
于 2013-03-18T01:35:13.923 に答える
0

キーハンドラーをアバターからレベルまたはステージに移動してから、アバターをそこに移動できます。

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

}
于 2013-03-17T23:20:52.270 に答える