[AS]BitmapDataのインスタンス生成時の注意

コンストラクタに渡す引数は正の整数でなくてはならない。

var myBitmapData:BitmapData = new BitmapData(0,0);
//ランタイムエラー

しかし、ライブラリのビットマップにリンケージでクラス指定したものを呼び出すときは、0でもOK。

var myBitmapData:MyBitmapData = new MyBitmapData(0,0);
//エラー無し

[AS]データ型とデフォルト値まとめ

  • Boolean:false:trueまたはfalse
  • int:0:32ビット符号付き整数
  • NUll:型指定に用いることはできない:null
  • Number:NaN:64ビット浮動小数点数
  • String:null:16ビット文字列
  • uint:0:32ビット符号無し整数
  • void:undefined:undefined
  • クラス:null:クラスのインスタンス

[AS]is演算子について

初期化されていないか、null代入された変数は型指定されていても、is演算子ではfalseを返す

var my_mc:MovieClip;
trace(my_mc);//出力:null
trace(my_mc is MovieClip);//出力:false

my_mc = new MovieClip();
trace(my_mc);//出力:MovieClip
trace(my_mc is MovieClip);//出力:true;

[AS]DisplayObject.rootはaddChildされてないとnull

var my_mc:MyClass = new MyClass();
trace(my_mc.root);//出力:null
addChild(my_mc);
trace(my_mc.root);//出力:[object MainTimeline]


DisplayObject.rootのまとめ

[AS]DisplayObjectはひとつだけ

あるひとつのDisplayObjectは、FlashPlayer上のすべてのDisplayObjectContainerインスタンスの子リストの中にひとつしか存在しえない。
すでにあるDisplayObjectContainerの子リストとして登録されているDisplayObjectを、べつのDisplayObjectContainerの子リストとして登録すると、先に登録されていた方は子リストから削除される。

[AS]リスナー関数を引数無しで呼び出す方法

リスナー関数の引数にデフォルト値nullを設定しておく。

function eventFunc(e:Event = null):void{
trace(e);//出力:null
}
eventFunc();

[AS]mcをステージいっぱいに敷き詰める例

//なんとなくこんな感じ
		public function DrawTest() {
			var mc:Mc = new Mc();//ライブラリのmcにMcでリンケージ
			var mcW:Number = mc.width
			var mcH:Number = mc.height;
			var numW:Number = Math.ceil(stage.stageWidth / mcW);
			var numH:Number = Math.floor(stage.stageHeight / mcH);
			var num:Number = numW * numH;
			
			for (var i = 0; i < num; i++) {
			var mc:Mc = new Mc();
			addChild(mc);
			var j:Number = 0;
			mc.x = i % numW * mcW;
			mc.y = Math.floor( i / numW ) * mcH;
			}
		}
DrawTest() 

[AS]Threadでのjoin()について

以下のように書くとエラーだった。

1個の関数内で、ParallelExecutorを2個作る。例えばa,b。

function test(){
a:ParallelExecutor = new ParallelExecutor();
b:ParallelExecutor = new ParallelExecutor();
~省略~
a.start();
a.join();
b.start();
b.join();
}

b.join()をコメントアウトするので動くので、1個の関数内で複数joinはダメぽ。
また↓のように関数分けて、next()で移動してもOK(当然か)

function test(){
var a:ParallelExecutor = new ParallelExecutor();
~省略~
a.start();
a.join();
next(test2);
}
function test2(){
var b:ParallelExecutor = new ParallelExecutor();
b.start();
b.join();
}

以下、偉人からのアドバイスメモ(今はまだ全理解しきれてない・・・)
joinのときは A.hoge() -> B.join() -> B.joinMonitor.wait() という感じでBを待つ状態。
Queue的なときはA.hoge() -> B.checkPoll() -> (データが鳴ければ)B.monitor.wait() で待ち状態。
それぞれ waitしようとしたときに、Aがすでに何かの待ちになっているとそれはエラー。
Threadはクラスメソッド内でいろいろしていて、どこかの処理でwaitが呼ばれたときに、呼び元(今動いてる)のThreadを待たせるといのが基本動作。
呼ばれた人が呼んだ人を状況により待たせるイメージ。
あるスレッドは同時に1つのスレッドしか待てない。
逆にあるスレッドを待ってるスレッドは何個でも待てる。

//2009/1/17追記
joint()とsleep()は同時に使えないみたい。

[AS]singletonクラスについて

インスタンスをひとつだけしか生成できない仕組みは以下のようにする。

package
{
	import flash.display.Sprite;

	public class Singleton extends Sprite {
        public static var instance:Singleton;
        public function Singleton( pvt:SingletonEnforcer ) {
            init();
        }
        public static function getInstance():Singleton {
            if( instance == null ) {
instance = new Singleton( new SingletonEnforcer() );
}
            return instance;
        }
		private function init():void {
			trace("シングルトン");
		}
	}
}
internal class SingletonEnforcer{};//internal 同じパッケージ内でのみ参照可能

//アクセス方法
Singleton.getInstance().init();

参照元:ステージの参照とシングルトン #2

[AS][?]最初のフレームに書き出し、について

元記事

AS2で、attachMovieを使ってステージに配置するとき、リンケージプロパティの、最初のフレームに書き出しにチェックが入っているときの注意。
これは1フレーム目のフレームアクションよりも先に、attachMovieされてしまうということだろうか?
つまり1フレーム目のフレームアクションにローディング処理が書かれていても、先にattachされてしまっているために、attachした分の読み込み状況が確認できないという事態になるのだろう。

対処法は元記事に書かれているとおり。

ただ最初のフレームに書き出しにチェックを外した場合、ステージ上にattachするMCをあらかじめ配置しておかないといけない。

(attachの仕方はこちらもかなり参考になる。)

ということは改めてattachする意味ってあるのか?
最初からステージに置いとけなくてattachがmustなケースってどんなケースだろ。

>追記
クラスをリンケージしたMCを使うときは、このケースがmustっぽいかな。