1

Costumクラスのステージクラスプロパティにアクセスするにはどうすればよいですか?

クラス:

package {
    import Main;
    import flash.events.*;
    import flash.display.Sprite;
    import flash.display.Stage;

    public class Run extends Sprite {
        var obj:a1_spr;


        public function Run() {
            runAssets();

        }



        private function runAssets():void {
            obj = new a1_spr()
            addChild(obj);
            obj.x = stage.stageWidth/2;

        }
    }
}

出力:

TypeError: Error #1009: Cannot access a property or method of a null object reference.
4

3 に答える 3

3

Joelが言ったことを拡張し、それをコンテキストに入れるには:

すべての表示オブジェクトには.stageプロパティがありますが、表示オブジェクトを表示リストに追加するまで、そのプロパティはnullです。そのため、建設中はアクセスできなくなります(後で追加されるため)

オブジェクトをステージに追加すると、イベントADDED_TO_STAGEが発生し、.stageプロパティが設定されたことがわかります。その後、オブジェクトのどこからでもステージにアクセスできます。

それがあなたのために物事を明らかにすることを願っています。

于 2009-07-26T18:34:20.643 に答える
2
this.addEventListener(Event.ADDED_TO_STAGE, handleAdedToStage)

private function handleAddedToStage(event:Event):void
{
    this.runAssets()
}

private function runAssets():void
{
    obj = new a1_spr();
    addChild(obj);
    obj.x = this.stage.stageWidth/2;
}

コンストラクターのステージにアクセスすることはできません(ステージをクラスに注入しない限り)。スプライトにはステージプロパティがあります。

于 2009-07-26T16:29:33.280 に答える
0

Flash が .as ファイルを使用して fla アセットをコンパイルするとき、ステージはありません。したがって、コードはドキュメントクラスの準備として開始されるため、レンダリングできるようにステージがあるかどうかをリッスンする必要があります。

そのため、 ADDED_TO_STAGE をリッスンして、実際に表示リストにあるかどうかを確認します。

この問題は、実際のステージがあるときに表示リストに追加する必要があるすべての表示オブジェクトで発生します。

そのリスナーを追加することに慣れ、ステージを確認します。特にチームで作業し、より大きなプロジェクトで独自のコンポーネントを作成する場合。

于 2009-07-30T08:33:28.377 に答える