Papervision3D の Materials(3) ~ MovieClip 系 ~
2007/05/21 21:46 - Papervision3D
今回は MovieClip 系マテリアルの話です。
MovieMaterial( asset : *, transparent : Boolean = false, initObject : Object = null )
MovieAssetMaterial( id : *, transparent : Boolean = false, initObject : Object = null )
fla ライブラリ内のムービークリップを 3D オブジェクトのテクスチャーとしたい場合、これらのマテリアルクラスを使います。
MovieMaterial と MovieAssetMaterial との違いは、対象ムービークリップの指定の方法です。
fla のフレームにはスクリプトを一切書き込まず、外部に Document Class として Main.as を作る派のワタクシとしては、それぞれ以下のようにしてます。
MovieMaterial は、ライブラリのリンケージプロパティのクラス欄に書いたクラス名で new。
MovieAssetMaterial は同じくクラス名を String として指定。
例えばリンケージプロパティのクラス欄が”test_mc”だった場合、以下のようになります。
new MovieMaterial( new test_mc() ); new MovieAssetMaterial( "test_mc" );
自分としては MovieAssetMaterial の方がなんとなく好きです。
ところで MovieAssetMatarial の第1引数 id の型が * になっていますが、たぶん String 型が正しいんじゃないかと思います(リビジョン 62 のときは String だったと記憶しています)。
MovieMaterial
|
MovieAssetMaterial
|
MovieMatarial も MovieAssetMatarial も上記サンプルのとおり挙動は同じなので、これ以降のサンプルは MovieAssetMatarial についてのみ掲示します。
第2引数 transparent
これはテクスチャーにしたムービークリップに透明部分があった場合、それを活かすか殺すかを指定する引数です。
transparent = false(default)
|
transparent = true
|
このサンプルでテクスチャーにしたムービークリップは、100ピクセル×100ピクセルの領域に、縦100ピクセル横20ピクセルの長方形を等間隔に配置したものです。
よって、3個の長方形の間に2個の縦100ピクセル横20ピクセルの隙間ができているわけですが、この引数がデフォルト( false )のままだと、2個の隙間が黒で塗りつぶされて、あたかも、正方形が5等分されているかのようになっています。
true にすると、透明部分として認識されるので、隙間は抜けて、向こう側が見えるようになります。
第3引数 initObject による ColorMaterial と WireframeMatarial の混在的表示
前回、graphics コマンド系で検証した、initObject による ColorMaterial と WireframeMatarial の混在的表示について見てみます。
{ fillColor:0xff0000 , fillAlpha:1 }
|
{ lineColor:0xff0000 , lineAlpha:1 }
|
fill(左側のサンプル)は反映されませんが、line(右側のサンプル)は反映されています。
前回の最後の検証のうち ColorMaterial の方を再度見てください。
第1第2引数が initObject に優先します。
つまり Movie 系マテリアルはムービークリップで面を塗りつぶしていることになるので、initObject で fill 系プロパティを指定しても無視されるということなのでしょう。
一方、initObject の lineColor と lineAlpha を使うと、あたかも WireframeMatarial と BitmapAssetMaterial を同時適用したかのような混在的表示が可能となります。
これは Bitmap 系マテリアルについても同様であると推察されます。
アニメートするムービークリップ対応
言うまでもないことですが、Flash ではアニメートするムービークリップを作ることができます。
そのようなアニメートするムービークリップをテクスチャーとした場合、デフォルトではそのアニメートは反映されず、当該ムービークリップの最初のフレームが静止表示されます。
プロパティ animated で true を指定すると、ムービークリップのアニメートが反映されるようになります(実際には animated はプロパティではなくセッター・ゲッターメソッド)。
animated = false(default)
|
animated = true
|