attachBitmap は、”指定された BitmapData オブジェクトの絵をこのムービークリップで表示する”という取り決めを交わすメソッドです。
1度約束しておくと、以降は BitmapData オブジェクトで管理している絵のデータが変わるたびにムービークリップの絵も自動的に変化します。
簡単な例で実験してみると分かります。
ステージに何か適当な絵を描き、これをムービークリップに変換してください。
「基準点:」は左上にします。
左上以外にすると、draw メソッドで取り込む際に絵が欠けることがあります。
このインスタンスに、次のようなスクリプトを書きます。
(↓各行頭に全角のスペースが入っています。コピーする際はご注意ください)
onClipEvent(load)
{
//ビットマップオブジェクトを作成
//自分と同じ大きさで透過なし、背景色は白
bmp_obj = new flash.display.BitmapData( this._width , this._height , false , 0xffffff );
//ステージに空のムービークリップを作り、(100,100)の位置に表示
_root.createEmptyMovieClip( “copy_disp” , 0 );
_root.copy_disp._x = 100;
_root.copy_disp._y = 100;
//自分の絵を取り込み、copy_dispに表示する
bmp_obj.draw( this );
_root.copy_disp.attachBitmap( bmp_obj , 1 );
}
on(release)
{
//ビットマップの内容をノイズに変える
//ノイズの素はムービーの再生時間を利用して0~255の間で決める
bmp_obj.noise( getTimer() & 0xff );
}
「ムービープレビュー」してみると、最初は同じムービークリップのインスタンスが2つ表示されているように見えます。
1つは予めステージに配置したものですが、ステージの X = 100 ・ Y = 100 の地点に表示されているのは BitmapData オブジェクトにムービークリップの絵を取り込んで作ったものです。
まず、createEmptymovieClip メソッドでステージ( _root 階層)に” copy_disp ”という名前の空っぽのムービークリップインスタンスを作ります。
このムービークリップの attachBitmap メソッドで、BitmapData オブジェクト” bmp_obj ”を関連付けます。
これで、bmp_obj が持っている絵がムービークリップ copy_disp に表示されるようになります。
(上記のスクリプトでは BitmapData オブジェクトに絵を取り込んだ後で attachBitmap を実行していますが、attachBitmap を先にしても同じです)
ステージに配置した方のムービークリップをクリックしてみてください。
copy_disp の絵が、テレビのサンドノイズ画面のような絵に変わります。
上記のスクリプトではノイズの素になる乱数のタネ(ランダムシード)を 0 ~ 255 の間で適当に選んでいますので、クリックするたびにノイズのパターンも変化します。
細かいことはさておき、on(release) の中では attachBitmap を実行していないことに注目してください。
attachBitmap を何度も実行しなくても、BitmapData オブジェクトの絵のデータが書き換えられるたびに copy_disp の絵も変化します。
つまり、attachBitmap は1度だけ実行しておけばいいということです。
attachBitmap を実行するたびに BitmapData オブジェクトの絵がムービークリップに出力されるのではありません。
********************************
ご質問文の関数でも、DisplayTG.attachBitmap で関連付けられている DisplayBMP の内容は、この時点では透明な黒1色で塗りつぶされたただの四角形です。
こんなものを関連付けても何も表示されず意味がないように見えますが、この関連付けは大切です。
この後、DisplayBMP には写真と半透明マスクのアルファ値を合成した絵のデータが入ります。
データを出力するための取り決めである attachBitmap は先の処理で既に済んでいますので、関連付けられたムービークリップにこの絵が表示されます。