-PR-
  • 暇なときにでも
  • 質問No.5100656
解決
済み

グラデーションでのマスクについて

  • 閲覧数1021
  • ありがとう数5
  • 気になる数0
  • 回答数2
  • コメント数0

お礼率 93% (178/190)

度々出た質問で恐縮ですが、上手く作動しなかったので質問させて下さい。

グラデーションでマスクを付けるのに、以下のようなスクリプトで作製したのですが、下のレイヤー(clip)にモーションを付けると作動してくれませんでした。

mask.cacheAsBitmap = true;
clip.cacheAsBitmap = true;
clip.setMask("mask");


何がいけなかったのか分からず、今度は以下のサンプルflaをDLしてみました。
http://www.whatdoiknow.org/archives/002407.shtml

このflaを元に画像だけ変更したら、動作したのですがそれを別のswfで読み込むとマスクの黒いグラデーションが見えてる状態で、マスクが効きません。

サンプルのflaもPlayer8で書き出すと動作し、Player9だと動作しなくなったりしますが、Playerのバージョンだけが問題ではない気がしています。(_rootのswfのバージョンを8にしてもダメだったので)


わかりづらい文ですみませんが、分かる方居ましたらよろしくお願いします。
  • 回答数2
  • 気になる数0

質問者が選んだベストアンサー

  • 回答No.2
レベル14

ベストアンサー率 91% (1611/1754)

#1です

> やはり下のレイヤーclipを動かす事は出来ないみたいです・・・。

なるほど,そうなりますね。
同様の現象を確認しました。

それはよくわかりません。
Adobe のプログラマの人などに訊くなどしないとわからないかもしれません。

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

しかし,普通そのようなことは気付かないとは思うのです。
なぜなら,
ActionScript 2.0 以下のままで Flash Player 9 の SWF をパブリッシュしようとなど通常は思わないからです。

閲覧ユーザの数を減らすという 「デメリット」 ならありますが,
「メリット」 の方がぜんぜん(ほぼ 0 に近く)ありません。

Flash Player 9 の SWF をパブリッシュする意味は
通常,ActionScript 3.0 を使う場合です。


ActionScript 3.0 では mask という言葉がプロパティに存在するので
変数名やインスタンス名に使えません。

マスクのムービークリップのインスタンス名を「msk」などに変更して
パブリッシュ設定を ActionScript 3.0 にして,
スクリプトを次のように変更すれば動作しますよ。

-------------------------------
msk.cacheAsBitmap = true;
clip.cacheAsBitmap = true;

clip.mask = msk;
-------------------------------


直接的な回答でなくて申し訳ありませんが...。
お礼コメント
vescent

お礼率 93% (178/190)

特にActionScript3を使用していたわけでもないので、何の考えもなしに2で作製してましたが、3にして上記の様に書き換えたら動作しました! 直接的な回答になっています、謎が知りたかったというより動作したらよかったので・・・
ですが、少し勉強になりました。ありがとうございました!
投稿日時 - 2009-07-06 13:26:33
  • ありがとう数0
-PR-
-PR-

その他の回答 (全1件)

  • 回答No.1
レベル14

ベストアンサー率 91% (1611/1754)

setMask() のあるべき構文は  MCインスタンス.setMask(MCインスタンス); が正解でしょう。 書かれていらっしゃるスクリプトやそのサンプルは  MCインスタンス.setMask("MCインスタンス名文字列"); になっています。 だから動作が変になるのだと思います。 ------ ------ ------ Flash ...続きを読む
setMask() のあるべき構文は

 MCインスタンス.setMask(MCインスタンス);

が正解でしょう。

書かれていらっしゃるスクリプトやそのサンプルは

 MCインスタンス.setMask("MCインスタンス名文字列");

になっています。
だから動作が変になるのだと思います。


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

Flash Player 8 用の SWF をパブリッシュした場合
なおかつ
その SWF をロードしない場合,

setMask("MCインスタンス名文字列");

で良いと言うわけではないのですが,
"MCインスタンス名文字列" が MCインスタンス と読み替えられてしまうため,無事に動作してしまうのだと思います。


Flash Player 8 用の SWF をパブリッシュした場合
なおかつ
その SWF を他からロード "した" 場合,

setMask("MCインスタンス名文字列");

だと 文字列は,あくまでも文字列であって,パスも階層も意味しないものとなるので,
 _root の "MCインスタンス名文字列" = _root の MCインスタンス
と読み替えられてしまうのでマスクがうまくかからないのだと思います。



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

Flash Player 9 用の SWF をパブリッシュした場合は,
おそらく上の「読み替えられる」という バグ(?) が解消されたので,
無事動作しなくなるのだと思います。



結局,
setMask("MCインスタンス名文字列");
で動くのが不正常(バグと言うべき???)だと思います。
お礼コメント
vescent

お礼率 93% (178/190)

回答ありがとうございます。

最初上手くいかなかった所、サンプルのものが("")で括られていて動作していたので、それが正解かと思いました。""を外してみたらマスクは上手く効いたのですが(Player9でも)、やはり下のレイヤーclipを動かす事は出来ないみたいです・・・。
投稿日時 - 2009-07-05 22:33:47
  • ありがとう数0
  • 回答数2
  • 気になる数0
このQ&Aで解決しましたか?

関連するQ&A

-PR-
-PR-
こんな書き方もあるよ!この情報は知ってる?あなたの知識を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する
-PR-
-PR-
-PR-

特集


-PR-

ピックアップ

-PR-
ページ先頭へ