AS3から変わったステージへのアクセス。AS2ではStageオブジェクトとしてどこからでもアクセスできましたが、AS3ではちょっとめんどくさい。軽くはまったのでメモ。
AS3でSpriteクラスを継承したカスタムクラスを作る場合などに、作成したカスタムクラスを表示オブジェクトのツリーに追加しないとstageプロパティはnullを返します。
表示オブジェクトが表示リストに追加されていない場合、stage プロパティは null に設定されます。
例えば、ステージのサイズとかが欲しいときは
//フレームアクション
var hoge = new HogeHoge();
addChild(hoge);
hoge.centering()
カスタムクラスをaddChild()してからcentering()メソッドを呼び出す
package
{
import flash.display.Sprite;
public class HogeHoge extends Sprite
{
private var sp:Sprite;
function HogeHoge()
{
sp = new Sprite();
//コンストラクタの時点ではstageプロパティはnullを返すので
//ステージのサイズは取得できない
}
public function centering():void
{
//stageはDisplayObjectContainerに追加されてはじめて
//取得可能になる
sp.x = (stage.stageWidth)/2;
sp.y = (stage.stageHeight)/2;
}
}
}
stageなどがDisplayObjectのプロパティになったのは、DisplayObjectを継承して自分自身のstageプロパティにアクセスしろってことなんですね?多分。
それから、確かAS2もそうだったけどAS3でもあいかわらずステージの1フレーム目ではstageHeightプロパティの返す値がおかしい。