chika666: December 2008 Archives

かなりハマって焦ったのでメモ。

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してないと参照できないし、最初にどっか別のクラスに格納しちゃって、あとからはそこを参照する方がいいかもですね。

わんだふるにゃんだふる

| | Comments (0) | TrackBacks (0)
久しぶりに書いてみた!

wonderflが凄いね。
ってみなさん言ってるからあえて言うのもアレだけど...
なにがいいって共有できるのがいいね。
他の人のが簡単に見れるし、編集できるし。
簡単すぎて焦るね。

一体これはどうなっているわけ??



http://wonderfl.kayac.com/code/d57f586c04294a7d920bd6714815c78dde978a5c

Archives