• ベストアンサー

マウスオーバーで外部ファイルを表示したい

初心者です。宜しくお願いします…。 「ステージ上にボタンを5つ配置し、ボタンにマウスを重ねると、一定の場所にそれぞれのボタンに対した画像が表示され、マウスが離れると非表示」というムービーを作りたくて、試行錯誤していました。 表示させたいMCをsetumei_mcとした場合 最初は、同じファイル内で処理を行おうと思い、ステージ上にsetumei_mcを(名前を変えて5個)配置し、ボタンの方に、「setumei_mcをあらかじめアルファを0にしておき、マウスが乗ると100、離れると0」という方法でやってみました。 (そして、表示された時に半透明の状態にしたかったのでsetumei_mcのを入れ子にし、中でmcのアルファをあらかじめ80%ぐらいに落としています。) 動作は成功したのですが、タスクマネージャーで表示状態を見ていると、他のフラッシュとくらべると明らかにマシンに負担がかかっていて、自分以外のPC環境での動作がかなり不安です。 半透明のまま表示はしたいので、この方法でステージ上に配置してるのがいけないのか…?外部ファイルで半透明にしたPNGorフラッシュで読み込まないといけなかったのか… また、外部ファイルを、マウスオーバーで半透明で表示させ、マウスが離れたら非表示。*フェードイン、アウトが負担がかかるようでしたらあきらめます…(i_i)…を具体的にどういう風にしたらいいのか…どなたか教えて頂けませんか? 初めての質問なので、文章など、要領を得てなかったらすみません。 ご回答、宜しくお願いします。

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

  • ベストアンサー
noname#35109
noname#35109
回答No.2

実際にタスクマネージャーでCPUの使用率を確認されたのですね。 いろいろ見てみるとわかると思いますが, 結局,アニメーションが動けばCPUの使用率が高くなることがわかると思います。 止まっていれば,JPEGでもGIFでもFlshでも,CPUに負担はかからないはずです。 ですから,アルファの使用自体は,表示されるとき以外全く関係ないです。 アルファが変化するときにCPUに負担をかけます。 たくさん書かれていますが,結局最後の  『*フェードイン、アウトが負担がかかるようでしたらあきらめます…』 ここの部分が問題なのだと思います。 PNGを使っても,外部SWFを呼び出しても, CPUが各ファイルに分散されるだけで全体の使用率にはほとんど影響しないと思います。 「アニメーションすること自体」がCPUの使用率を高めます。 特に「アルファが ”変化” するというアニメーション」でCPUに負担をかけてしまいます。 >> *フェードイン、アウトが負担がかかるようでしたらあきらめます… あきらめなくても,方法を少し変えれば大丈夫だと思います。 全ての場合,うまく行くかどうかはわかりませんが,なんとかなることもあります。 フェードイン・アウトするオブジェクトの背景が,白または黒の場合, 「アルファの変化」を使わずに「明度の変化」を使えば良いです。 見かけ上同じように,フェードイン・アウトすると思います。 試しに,写真か何か複雑な物をオブジェクトにして, そのオブジェクトをアルファでフェードイン・アウトさせた場合と, 明度でフェードイン・アウトさせた場合とを比べてみるとわかります。 明度でフェードイン・アウトするほうがずっとスムーズで,タスクマネージャーで数値を見ても,使用率はずっと低くなることがわかると思います。 私ほ以前から必要でない限り,アルファを使ったフェードイン・アウトは使わないようにしています。 モーショントゥイーンで変化させる場合はどちらも操作上,手間は変わらないです。 でもスクリプトでフェードイン・アウトされている場合は,少々手間です。 仮に mcA というムービークリップを作ったとします。 その mcA のアルファを50%にするには, mcA._alpha = 50; これだけで良いです。 でも明度はこんな手軽にはできません。 ヘルプのActionScript 辞書にはないけど明度の変更はアルファと同様にできるかな? と思って(思うな!って), mcA._brightness = 50; としてみましたが(するなよ…),明度の変更はできませんでした(当たり前)。 明度の変更には Color.setTransform を使います。 以下は, mcA というインスタンス名のムービークリップを,背景白からフェードインさせるスクリプトの一例です。 ----------------------------------------------------- onClipEvent (load) { i = 255; } onClipEvent (enterFrame) { if (i<=0) { i =0; } else { i -= 5; } // ターゲット mcA 用にカラーオブジェクト myColor を作成 myColor = new Color(_root.mcA); // カラー変換オブジェクト myColorTransfrom を作成するために // 汎用 Object オブジェクトを使用 myColorTransform = new Object(); // myColorTransform の値を設定 myColorTransform = {rb:i, gb:i, bb:i}; // myMovie のために作成した // カラー変換オブジェクトと Color オブジェクトを関連付ける myColor.setTransform(myColorTransform); } ----------------------------------------------------- 注釈文などはほとんど,ヘルプからの引用です。 rb は,赤の成分のオフセット (-255 ~ 255) , gb は,緑の成分のオフセット (-255 ~ 255) , bb は,青の成分のオフセット (-255 ~ 255) です。 以上のようにスクリプトで明度を変化させるのは,やたら大変です。 明度の変化は,モーショントゥイーンで変化させた方が,軽く作りやすくできると思います。 背景が,白または黒でない場合で,特に背景に複雑な模様が入っているようなときは, アルファによるフェードイン・アウトしかないです。 その場合は,アルファの変化を使う 面積 をなるべく小さくしてください。 例えば,写真がだんだん消えて,その背景にある「あ」という文字がだんだん見えてくるアニメーションだと, 写真がだんだん消えるアニメーションは「明度」で変化させて, 「あ」は背景に置くのではなく,写真の前にアルファ0で置いておいて,「あ」のアルファをだんだん100に近づける。 アルファで変化する面積はかなり小さくなります。 ========================================== すみません,長くなってしまいました。 結局, ◎フェードイン・アウトはアルファより明度を使った方が良い。 ◎アルファの変化はなるべく面積を少なくしたほうが良い。 ということです。

sugarless_latte
質問者

お礼

アルファを使いたい際のムービーの工夫がよくわかりました! 丁寧に回答頂いて、本当にありがとうございます!! 上記の例を参考に、色々試してみますo(^ ^)o

その他の回答 (1)

回答No.1

基本的にアルファ表示は負担がかかると思います。 いまどきのパソじゃ良いですけど、2世代くらい前のパソじゃかなり厳しい事がありますね。 実際のスクリプトを見た訳じゃ無いので、スクリプトのチューニング方法は分かりませんが、表示させる元画像は充分小さく(解像度等)なってますか? この辺がかなり影響すると思いますので、よく精査する必要があると思います。

sugarless_latte
質問者

お礼

画像のサイズも、できるだけ小さくしてみます。 ありがとうございました!