3
 package    {

 import flash.display.Stage;

 public class MyGlobal {

  public static  var CX:Number = stage.stageWidth / 2;
  public static  var CY:Number = stage.stageHeight / 2;  

 }

}

エラーは"1120: Access of undefined property stage."なぜですか?

4

4 に答える 4

9

前述のように、stage は DisplayObject を継承するクラスのプロパティです。ステージは、通常、DisplayObjectContainer の addChild メソッドを介してステージに追加されるまで、クラスで使用できません。

于 2010-01-12T06:51:41.517 に答える
3

stageプロパティは、ステージに追加されたオブジェクトを表示するためにのみ使用できます。クラスはDisplayObjectを継承しないため、クラスのステージプロパティは存在しません。クラスがDisplayObjectから継承した場合でも、親の表示オブジェクトからaddChild()を介してステージに追加する必要があります。

クラスが表示オブジェクトを意図していないが、測定またはその他のプロパティのためにステージオブジェクトが必要な場合は、それを引数としてコンストラクターに送信します。

それ以外の場合は、クラスにDisplayObjectを継承させ、オブジェクトがステージに追加されるときのイベントリスナーを追加する必要があります。

addEventListener(Event.ADDED_TO_STAGE, onAddedToStage);

onAddedToStage()メソッドで、ステージが使用可能になります(編集:最上位の親コンテナーがステージに追加されている限り、ステージプロパティが使用可能になります)。

于 2010-01-12T06:55:19.640 に答える
1

クラスのコンストラクターにステージオブジェクト参照を渡すことでこれを解決しました。あなたはステージを通過しなければならないので、私は正直に解決策が好きではありませんが、それは私が見た最も簡単な方法です.

これは私がコンストラクターで行ったことです:

public function Ball(b:Object,stageRef:Object)
{
    ballObject = b;
    speed = 10;
    stageRef.addEventListener(KeyboardEvent.KEY_DOWN,function(e:KeyboardEvent):void{
        currentKeyCode = e.keyCode; 
    });
    stageRef.addEventListener(KeyboardEvent.KEY_UP,function(e:KeyboardEvent):void{
        currentKeyCode = 0;   
    });
}
于 2011-10-02T07:45:57.193 に答える
0

サムからの答えは、実際にはかなり正しいです。最も簡単な説明は、これstageはインスタンスであり、クラス メンバーではないということです。

フィールドが静的であると宣言されていない場合は、ステージにアクセスできます。しかし、おそらくヌル参照エラーが発生するでしょう;)

于 2010-01-12T20:51:22.797 に答える