0

AS3 を使用した OOP プログラミングは初めてです。キーが押されたときに応答するリスナーを作成しようとしています。

タイムラインに入力したときは問題なく動作しましたが、独自のパッケージにあるとまったく応答しません。何が間違っているのですか?

package{
    import flash.events.KeyboardEvent;
    import flash.display.Sprite;

    public class PlayerController extends Sprite{
        public function PlayerController(){
            addEventListener(KeyboardEvent.KEY_DOWN,onButDown);
        }
        function onButDown(event:KeyboardEvent):void{
            trace("Key Down");
        }
    }

}

そして、メインクラスにはこれがあります:

var pc:PlayerController = new PlayerController();

ありがとう

4

2 に答える 2

1

ここでの問題は、PlayerController のインスタンスがフォーカスを受けていない可能性があります (表示リストに追加しているように見えないため、決してフォーカスされません)。オブジェクトにフォーカスがない場合、オブジェクトはキーボード イベントを受け取ることができません。

1 つの解決策は、コンストラクターで への参照を渡し、stage代わりにイベント リスナーを追加することです。

package
{
    import flash.events.KeyboardEvent;
    import flash.display.Sprite;

    public class PlayerController extends Sprite{
        public function PlayerController($stageRef:Stage){
            $stageRef.addEventListener(KeyboardEvent.KEY_DOWN,onButDown);
        }
        function onButDown(event:KeyboardEvent):void{
            trace("Key Down");
        }
    }

}

次に、メイン アプリで次の操作を行います。

var pc:PlayerController = new PlayerController(stage);

stage追加する編集:これは、ではないことを前提としていnullます。この方法でインスタンス化する前に、それを確認する必要がありますPlayerController

于 2013-02-27T20:56:25.363 に答える
0

一般に、すべてのイベント リスナーとそれらが呼び出す関数をメイン クラスに配置することになっています。それだけです。

于 2013-02-27T20:54:54.707 に答える