ちょっと先の未来クイズ第4問

FLASH作成ソフトのsuzukaでアニメーションを作っています。

透過済みのpng画像の上にマスクでベクタ画像を表示したいのですが、
png画像にマスクをしても、ベクタ画像がpng画像の形にならず
失敗してしまいます。
透過していてもpng画像はマスクに使えないのでしょうか?

A 回答 (1件)

Flash のマスクは本来 「ベクタ画像の"形"」 でかけるものですから


できないのが普通ですし、PNGをマスクにする必要性が特に(あまり)見つからないので、
今までやってみたことはありませんでしたが...
しかし、
このご質問を見て実際にやってみましたら、透過(またはアルファ入り)PNGもマスクにできることがわかりました。

ただし条件付きです。

まず、
Suzuka の 「ファイル」→「プロジェクトのプロパティ」で
「SWFバージョン」の項目を 「SWF8」 にする必要があります。
(少なくとも携帯用 SWF4 では無理ということになります。)

そして、
レイヤーのマスク機能でマスクをかけるのではなくて、
ActionScript でマスクをかける必要があります。

さらに、
「マスクになるPNG」も「マスクをかけられる画像」も、
両方ともスプライト(ムービークリップ)の中に入れておく必要があります。



「シンボルリスト」内にスプライトを 2つ 追加して、
1つの スプライト 内の編集に入り、
そのスプライト内のレイヤーに、マスクになる PNG を追加します。
もう 1つの スプライト 内の編集に入り、
そのスプライト内のレイヤーに、マスクをかける画像を追加します。

その 「PNG入りスプライト」 と 「マスクをかけられる画像入りスプライト」 を
メインのレイヤーに追加します。

「PNG入りスプライト」 を配置したレイヤー名の部分をダブルクリックするなどして
「レイヤーのプロパティ」 パネルで任意の インスタンス名 を付けます。
ここでは 「png_mc」 という インスタンス名 を付けることにしておきます。

また、
「マスクをかけられる画像入りスプライト」 を配置したレイヤー名の部分もダブルクリックするなどして
「レイヤーのプロパティ」 パネルで任意の インスタンス名 を付けます。
ここでは 「my_mc」 という インスタンス名 を付けることにしておきます。

メインのタイムラインの一番上のレイヤー名を右クリックするなどして
「アクションレイヤーを挿入」 します。

そのアクションレイヤーのキーフレームを選択して、
キャンバス右側のパネルにある右下の「スクリプトを編集」ボタンをクリックし、
出てくる「スクリプトエディタ」パネルに次のように書きます。

---------------------------------------
// 「png_mc」のビットマップキャッシュを有効にする
png_mc.cacheAsBitmap = true;
// 「my_mc」のビットマップキャッシュを有効にする
my_mc.cacheAsBitmap = true;
// 「my_mc」 に 「png_mc」 のマスクをかける
my_mc.setMask(png_mc);
---------------------------------------

そして、
「ウィンドウ」→「プレビュー」などをすればマスクがかかっているのが確認できると思います。

以上の操作を1枚の画像にまとめたのが 【下の図】↓ です。

「透過していない部分」か「透過している部分」かの違いで、
「マスクになる部分」か「マスクにならない部分」が別れるのがわかると思います。

またそれに加えて 「アルファ」 のマスクもかかっているのがわかると思います。

 (マスクは結局 "形" になるだけですから
 マスクになるPNGの絵柄に凝っても意味がないのですが、
 「Air Chrysalis (空気さなぎ)」 でも描いてみました。
 (「Air Cocoon」 と訳すべきだったのだろうか???)
 何でも良いですが、時のものを描いてみたただけのことで
 絵柄に特に深い意味はありません。)



PNG を使った説明ではありませんが、
上に書いたことの大半は次↓のページに書いてあることです。
上に書いたスクリプトも、
次のページで書いてあるスクリプトをほぼそのまま使用しています。

「マスク・グラデーションマスク」
http://suzupara.iinaa.net/kiso111.html
「suzukaでマスクにpngが使えない」の回答画像1
    • good
    • 0
この回答へのお礼

わざわざご丁寧に画像までつけて下さって、ありがとうございます。
このやり方で出来ました!本当に感謝です。
アクションスクリプトはちょっと難しそうなので、今まで避けてきましたが
これを期に利用していきたいと思いました。
今回は本当にありがとうございました!

お礼日時:2009/08/10 15:09

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


おすすめ情報