カスタムクラスの ActionScript 3.0 stageWidth
-
19-09-2019 - |
質問
Costum クラスの Stage Class プロパティにアクセスするにはどうすればよいですか?
クラス:
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.
解決
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;
}
コンストラクターでステージにアクセスすることはできません (ステージをクラスに挿入しない限り)。スプライトにはステージプロパティがあります。
他のヒント
ジョエルの発言を拡張して文脈に置き換えると、次のようになります。
すべての表示オブジェクトには .stage プロパティがありますが、そのプロパティは表示オブジェクトを表示リストに追加するまでは null です。したがって、構築中はアクセスできません(後で追加されるため)。
オブジェクトをステージに追加すると、イベント ADDED_TO_STAGE が発生し、.stage プロパティが設定されたことがわかります。その後、オブジェクト内のどこからでもステージにアクセスできるようになります。
これで物事が明確になることを願っています。
Flash が .as ファイルを使用して fla アセットをコンパイルする場合、ステージはありません。そのため、コードは documentclass の準備として開始され、レンダリングできるようにステージがあるかどうかをリッスンする必要があります。
そのため、 ADDED_TO_STAGE をリッスンして、それが実際に表示リストに含まれていることを確認します。
この問題は、実際のステージがあるときに表示リストに追加する必要があるため、すべての表示オブジェクトで発生します。
そのリスナーを追加し、ステージを確認することに慣れてください。特にチームで作業し、大規模なプロジェクトで独自のコンポーネントを実行する場合はそうです。
所属していません StackOverflow