かなりハマって焦ったのでメモ。
このクラスをステージに配置したインスタンスのシンボルにリンケージで紐付ける。
DisplayObjectにはstageプロパティがあって、
今までここからStageクラスのインスタンスにアクセスして
this.stage.stageWidthとかthis.stage.stageHeight
ってな感じでFlashコンテンツのステージサイズをとってました。
ところが、Flashのオーサリングツール上でインスタンスを静的配置した場合、
そのクラスのコンストラクタ内で、stageプロパティにアクセスすると、
タイミング的にstage.stageHeightやstage.stageWidthが正しく取得できないことがあります。
環境によってはうまくいく場合の方が多いので気づきにくいですが。。。
具体的には以下のような感じ
package
{
import flash.display.Sprite;
public class Test extends Sprite
{
private var _stageWidth:Number;
private var _stageHeight:Number;
public function Test()
{
_stageWidth = this.stage.stageWidth;
_stageHeight = this.stage.stageHeight;
}
}
}
このクラスをステージに配置したインスタンスのシンボルにリンケージで紐付ける。
静的配置したインスタンスの場合、コンストラクタの実行されるタイミングが結構怪しいので、stageプロパティにちゃんとStageインスタンスが格納されていない場合があるのかな。。
でもメモリ領域は確保していて参照は保持しているので、コンストラクタで別のプロパティに格納しておいて後で使うのは全然問題なし。
stageプロパティはaddChildしてないと参照できないし、最初にどっか別のクラスに格納しちゃって、あとからはそこを参照する方がいいかもですね。

Leave a comment