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."
なぜですか?
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."
なぜですか?
前述のように、stage は DisplayObject を継承するクラスのプロパティです。ステージは、通常、DisplayObjectContainer の addChild メソッドを介してステージに追加されるまで、クラスで使用できません。
stageプロパティは、ステージに追加されたオブジェクトを表示するためにのみ使用できます。クラスはDisplayObjectを継承しないため、クラスのステージプロパティは存在しません。クラスがDisplayObjectから継承した場合でも、親の表示オブジェクトからaddChild()を介してステージに追加する必要があります。
クラスが表示オブジェクトを意図していないが、測定またはその他のプロパティのためにステージオブジェクトが必要な場合は、それを引数としてコンストラクターに送信します。
それ以外の場合は、クラスにDisplayObjectを継承させ、オブジェクトがステージに追加されるときのイベントリスナーを追加する必要があります。
addEventListener(Event.ADDED_TO_STAGE, onAddedToStage);
onAddedToStage()メソッドで、ステージが使用可能になります(編集:最上位の親コンテナーがステージに追加されている限り、ステージプロパティが使用可能になります)。
クラスのコンストラクターにステージオブジェクト参照を渡すことでこれを解決しました。あなたはステージを通過しなければならないので、私は正直に解決策が好きではありませんが、それは私が見た最も簡単な方法です.
これは私がコンストラクターで行ったことです:
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;
});
}
サムからの答えは、実際にはかなり正しいです。最も簡単な説明は、これstage
はインスタンスであり、クラス メンバーではないということです。
フィールドが静的であると宣言されていない場合は、ステージにアクセスできます。しかし、おそらくヌル参照エラーが発生するでしょう;)