-3

Adobe Flash Professional CS5 (ActionScript 3.0 を使用) でプロジェクトを構築しています。

クラスの 1 つで、シーンのサイズに基づいていくつかのオブジェクトをシーンに追加したいと考えています。

コンストラクターで次のコードを使用しています。

stageWidthint = stage.stageWidth;
stageHeightint = stage.stageHeight;
startMenu.x = stageWidthint / 2;
startMenu.y = ((stageHeightint / 2) - 40);
instructionsMenu.x = stageWidthint / 2;
instructionsMenu.y = ((stageHeightint / 2) + 2);
highscoreMenu.x = stageWidthint / 2;
highscoreMenu.y = ((stageHeightint / 2) + 44);
quitMenu.x = stageWidthint / 2;
quitMenu.y = ((stageHeightint / 2) + 86);
this.addChild(startMenu);
this.addChild(instructionsMenu);
this.addChild(highscoreMenu);
this.addChild(quitMenu);

で null 参照を取得していますstagestageクイック検索の後、その時点ではまだロードされていないことがわかりました。それでも、それらの子をクラスに追加したいと思います。ステージはいつロードされますか? この問題を解決し、ゲームの開始時にすべてのものを表示するにはどうすればよいですか?

4

3 に答える 3

1

シーンを使用するときにどのように機能するかはわかりませんが、次のことを試すことができます。

package  {
  import flash.display.*;
  import flash.events.*;


  public class Test extends MovieClip {


    public function Test() {
      if (stage) {
        init();
      } else {
        addEventListener(Event.ADDED_TO_STAGE, init);
      }
    }

    protected function init(event:Event = null):void {
      trace("init");
      if (event) { removeEventListener(Event.ADDED_TO_STAGE, init) };
      //your code here
    }
  }
}
于 2013-03-11T20:26:24.300 に答える
1

コンストラクターで ADDED_TO_STAGE イベントを使用します。

 public function ConstructorName():void 
 {
     addEventListener(Event.ADDED_TO_STAGE,onAddedToStage); 
 }

 private function onAddedToStage(e:Event):void 
 {   
      removeEventListener(Event.ADDED_TO_STAGE,onAddedToStage);
      // add init code here
 }
于 2013-03-11T20:24:51.327 に答える
0

Stageオブジェクトはグローバルに使用できません。
MovieClip を拡張するクラスには、プロパティ "stage" (小文字)
があります。クラスのインスタンスがステージに追加されるまで、"stage" プロパティは null です。
そのため、ADD_TO_STAGE イベントをリッスンします。

stage = null には回避策があり、そのうちの 1 つはコンストラクタ IE のパラメータとしてステージに渡すことです。 var xxx:MyClass = new MyClass(stage); これは、インスタンスを作成するクラスがすでにステージへの参照を持っている場合です。

カスタム クラスでステージにアクセスすることは、OOP の適切なプラクティスではないことを付け加えたいと思います。私が提案するのは、幅セッター/ゲッターをオーバーライドすることです。これは、たとえば、横向きから縦向きの回転など、サイズ変更が変更される可能性があるためです。

于 2013-03-12T15:44:43.553 に答える