Think About it



Home > Blog

20071016

cacheAsBitmap(2)


マスクは便利な機能ですが、通常の使い方ではフィルタが
かかっていたり透明のマスクなどは効果が切れてしまいます。

■マスクをかける前


■マスクをかけた後(通常どおり)


■フィルタ「ぼかし」をかけたMCをマスクに


しかしそれも、cacheAsBitmapを使えば実現できます。

※要FlashPlayer8以上

マスクのかけてやり方はフレームにマスクレイヤーを作るのではなくて、
スクリプト、setMask()でかけてやります。
(でないと出来ません)

test_mc.setMask(mask_mc);

test_mc.cacheAsBitmap = true;
mask_mc.cacheAsBitmap = true;


この様に、双方をビットマップに変換してやると、ぼかし等のフィルタがかかっていたりしてもマスクをかける事ができます。



そのマスクを動かしてやっても問題ありません。



この事はヘルプにも書いてあるそうです。
(ちょっと感嘆の声を上げました)

アルファチャンネルマスクについて
アルファチャンネルマスクは、マスクとマスクされたムービークリップの両方でビットマップキャッシュが使用されている場合にサポートされます。



ちなみに、

フィルタ、キャッシュおよび MovieClip クラスの操作
ムービークリップに少なくとも 1 つのフィルタが適用されていれば、cacheAsBitmap プロパティが true となり、実行時にムービークリップがビットマップとしてキャッシュされます。



だ、そうです。

なら、フィルタをかけている方にはcacheAsBitmapをかけてやらなくても大丈夫という事でしょうか。

結果、こうなりました。


大丈夫、という事ですね。

参考:グラデーション・マスク - にゃあプロジェクト ウェブログ

Labels: ,

----------------------------------------------------------------------------------------------------

20071011

cacheAsBitmap(1)


setMaskを使うとスクリプトでマスクをかけることが出来ます。

test_mc.setMask(mask_mc);




test_mcをmask_mcでマスクして表示。
mask_mcの円の形にtest_mcがくりぬかれます。

この、mask_mcは今、描画オブジェクトで書かれていて、線はなし、塗りのみ、となってます。

では、逆に線だけ、でマスクをかけることは出来るのでしょうか?
とりあえす、mask_mcを線だけにしてみます。



結果はごらんの通り。何も表示されません。

要するに、描画オブジェクト(ベクターオブジェクト)の場合は塗りのみマスクが適用されるようです。

では、描画オブジェクトではなく、ビットマップに変えてしまえばいいのでないか、となります。

それが、cacheAsBitmapプロパティです。

acheAsBitmap (MovieClip.cacheAsBitmap プロパティ) - Flashドキュメンテーション

これを使用するとベクターオブジェクトをビットマップオブジェクトに変換できます。

引用
ビットマップがキャッシュされているムービークリップのベクターデータはすべて、メインステージでなくビットマップに描画されます。


このようにします。

test_mc.setMask(mask_mc);
test_mc.cacheAsBitmap = true;
mask_mc.cacheAsBitmap = true;




結果、みごとに線にマスクをかけることが出来ました。

参考 - 線でマスク:にゃあプロジェクト

Labels: ,

----------------------------------------------------------------------------------------------------