1

Flashで作成したプロジェクトでは、Flexでプレローダーを実行しようとしています。私はこのサイトの リンクテキストの助けを借りてこれを作ります 私のFlashプロジェクトはゲームと呼ばれるメインクラスの次のソースを持っています

stage.addEventListener(KeyboardEvent.KEY_DOWN, keyDown);
stage.addEventListener(KeyboardEvent.KEY_UP, keyUp);

private function keyDown(event:KeyboardEvent) {
   if (event.keyCode == 81 && q_was_push == false) q_was_push = true;
   if (event.keyCode == 81) press_q = true;
   if (event.keyCode == 65) press_a = true;
   if (event.keyCode == 83) press_s = true;
   if (event.keyCode == 32) press_space = true;
} ...

Flexで作成された新しいswfファイルを取得すると、エラーTypeErrorが発生します:エラー#1009:nullオブジェクト参照のプロパティまたはメソッドにアクセスできません。Game()で

コメントしたら

//stage.addEventListener(KeyboardEvent.KEY_DOWN, keyDown);
//stage.addEventListener(KeyboardEvent.KEY_UP, keyUp);

Flexアプリケーションは機能しますが、Flashアプリケーションはボタンの押下に反応しません

プリローダーと作業ボタンを一緒に作成する方法を教えてください

4

2 に答える 2

6

stage表示オブジェクトが表示リストに追加されるまで、プロパティは null になります。addedToStageイベントをリッスンし、そこからキー リスナーを追加します。

addEventListener(Event.ADDED_TO_STAGE, onAddedToStage);
function onAddedToStage(e:Event):void
{
    stage.addEventListener(KeyboardEvent.KEY_DOWN, keyDown);
    stage.addEventListener(KeyboardEvent.KEY_UP, keyUp);
}
于 2010-09-04T10:01:54.307 に答える
2

ステージにアクセスする必要があるときはいつでも、クラスにステージをリッスン/コンストラクターでチェックさせ、init関数をハンドラーにします。

package
{
    import flash.display.Sprite;
    import flash.events.Event;
    /**
     * ...
     * @author Brian Hodge
     */
    public class SomeClass extends Sprite
    {

        public function SomeClass() 
        {
            if (stage) _init();
            else addEventListener(Event.ADDED_TO_STAGE, _init);
        }
        private function _init(e:Event = null):void
        {
            //You may now access the stage property of the DisplayObject.
            stage.addEventListener(Event.RESIZE);
        }
  }

}
于 2010-09-05T06:37:06.763 に答える