フェードイン/フェードアウトの問題と表示されない立方体の解決方法

このQ&Aのポイント
  • 質問者はフェードイン/フェードアウトの実装に関して困っています。MCを読み込むとswfファイルの動きが遅くなる現象が発生しており、アクションスクリプトでremoveMovieClip()を使用して不要なMCを消去しようとしましたがうまくいきませんでした。
  • また、質問者はFumio Nonaka.com様の3D_Boxをmc2にコピーしたが、立方体が表示されなくなってしまいました。質問者は深度に関係があるのかどうかを知りたいと思っています。
  • 質問者はフェードイン/フェードアウトの問題と立方体の表示問題の解決方法を教えてほしいとしています。
回答を見る
  • ベストアンサー

前回のフェードイン/フェードアウトの続きなんですが・・・

昨日、sassakun様にご回答いただいたように、 ムービークリップでFLASHを作り直させて頂きました。 基本的には無事に動いたのですが、 問題点が2点ありますので、もしよろしければ教えて下さい。 1つ目は、 ボタンでMCを読み込むにつれて、swfファイルの動きが大変遅くなってしまうという現象です。 不要になったMC(階層が一つ下になった時点/最上位階層でなくなった時点)を をremoviMovieClip()で消滅させたいと思い、 各ムービークリップの45フレーム目に (45フレームまでがフェードイン/アウトで重ねたい部分なので) そのMC以外を指定してアクションスクリプトを記入したのですが、 消えませんでした。 記入したアクションスクリプトは、 mc0の45フレーム目に mc1.removeMovieClip(); mc2.removeMovieClip(); mc1の45フレーム目に mc0.removeMovieClip(); mc2.removeMovieClip(); mc2の45フレーム目に mc0.removeMovieClip(); mc1.removeMovieClip(); です。 2つ目は、 Fumio Nonaka.com様の3D_Boxをmc2にコピーしたのですが、 立方体が表示されなくなってしまいました。 これについては全くわからないのですが、 深度に関係があるのでしょうか? <利用させて頂いているアクションスクリプトの掲載URL> http://www.fumiononaka.com/Sample/3D_Box/3D_Box.html 下段のSource to download (約192KB/Flash 8形式): 3D_Box.zip 以上、2点の解決方法を教えて頂けないでしょうか? よろしくお願いします。

  • Flash
  • 回答数2
  • ありがとう数4

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

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

#1です。 何も問題が起こらなければ これがベストではないかと思いますよ↓。 > ※各mcの1フレーム目にはstop();だけが入っていますので、 > ここでストップさせれば消去しなくても動きが遅くなるような > ことはないと思うのでこの案を提案しました。 その他も考えてみましたが, loadMovie(外部ファイルを読み込む) するためには, 全面的に Flash の作り直しになってしまいますから面倒ですね。 また,ファイル管理なども大変になります。 attachMovie(ライブラリから呼び出す) すると, ムービークリップを作る際の基準点を attachMovie をすることを前提としてうまく細工しておくか, 表示させる座標をなんとか補正する計算処理をさせなければならなくなります。 それに両方とも説明がするのに膨大な字数が必要になる気がします。 やはり, 書かれていらっしゃる「各mcの1フレーム目にはstop();…」が良い方法だと思います。 loadMovie や attachMovie に関しては別の機会にでも簡単な実験をしながら作成してみられるのも良いかもしれません, ◎loadMovie についての参考URL 「MovieClip.loadMovieで外部ファイルを読込む - Flash テクニカルノート」 http://www.fumiononaka.com/TechNotes/Flash/FN0307007.html  ~引用~ > 1. MovieClip.loadMovieメソッド > 外部ムービーファイルを読込むには、MovieClip.loadMovie > メソッドを使います。Flash MXからは、SWFムービー以外に、 > JEPGファイルも読込めるようになりました。  ~↓上記内容に私が勝手に補足と追加↓~  Flash 8 からは、SWFムービー JEPGファイル以外に、  PNGファイル、GIFファイルも読込めるようになりました。  しかし、これらは JPEG とは少し違います。  上記にありますように、  Flash MX からJPEG が読み込めるようになりましたが  正確にはそうではなくて,Flash Player 6 からJPEG が読  み込めるようになりました。  従って Flash 5や4 で JPEG をロードするアクション  を書いても,再生される Player が 6 以上であれば、  JPEG がロード&表示されます。  つまり JPEG がロード可能になったのは、  Flash Player のバージョンアップのみが原因です。  したがって,例えばFlash Player 4 用 SWF を  パブリッシュしても JPEG は表示可能です。  一方、  PNGファイル、GIFファイルは Flash Player 8 以上の  SWF にパブリッシュしないと表示されません。  PNGファイル、GIFファイルのロード&表示には、  Flash Player のバージョンアップのみではなく、  SWF ファイルのバージョンアップも必要です。 ◎attachMovie についての参考URL 「リンケージとは?」 http://www.1art.jp/flash/le/lessona/lessona.htm 「ヤッチマイナシコー!【跡地】 第4回 attachMovie」 http://nashiko3.blog12.fc2.com/blog-entry-270.html その他 Google検索 「attachMovie Flash」 http://www.google.co.jp/search?hl=ja&q=attachMovie+Flash&lr=

rose_web
質問者

お礼

おはようございます。 回答して頂き有難うございます。 > ※各mcの1フレーム目にはstop();だけが入っていますので、 > ここでストップさせれば消去しなくても動きが遅くなるような > ことはないと思うのでこの案を提案しました。 をするために記入するアクションスクリプトを教えて頂けないでしょうか? 昨日からずっと色々試しているのですが全然できないので、お願いします。

その他の回答 (1)

noname#35109
noname#35109
回答No.1

読み込む??? 全くもって謎です。 前回のご質問&回答&補足では, 何かを読み込むということには全く関係していませんよ。 「ページの切り替えのフェードイン/フェードアウトについて」 http://oshiete1.goo.ne.jp/qa3063798.html  ↑教えて!goo  ↓OKWave (同じです) http://okwave.jp/qa3063798.html また, Flash で何かの構造物を読み込むというのは, 一般的には loadMovie で外部SWF や JPEG などを読み込むことだと思います。 そしてまた, その読み込んだものを消すのは普通,removeMovieClipではなくて,unloadMovieです。 Flashドキュメンテーション loadMovie (MovieClip.loadMovie メソッド) http://livedocs.adobe.com/flash/8_jp/main/00002479.html unloadMovie (MovieClip.unloadMovie メソッド) http://livedocs.adobe.com/flash/8_jp/main/00002527.html さらに, removeMovieClip で消せるのは,深度0 以上のムービークリップです。 Flashゲーム講座&ASサンプル集【深度について】#Z_01 http://hakuhin.hp.infoseek.co.jp/main/as/z.html#Z_01  ~引用~ > 通常Flashで作るときに配置するMCインスタンスの深度は、 > -16325 あたりで自動的に割り振られて設定されています。 > … 略 … > 例1)MCインスタンス a を削除。 > (深度が0より低いMCは消せない) > _root.a.removeMovieClip(); > > 例2)MCインスタンス a の中にある > MCインスタンス b を削除。 > (深度が0より低いMCは消せない) > _root.a.b.removeMovieClip(); そして,さらに, 仮に消せたとしても ムービークリップ ごと消えてしまいますよ。 つまり,消したらまた作成しないと再び現れてくれません。 その辺は大丈夫なのでしょうか。 寝耳に水のような,まったく状況がわからない謎なご質問だと思います。 > 記入したアクションスクリプトは、 > mc0の45フレーム目に > mc1.removeMovieClip(); > mc2.removeMovieClip(); 以上で説明したように, 「mc1 や mc2 などは消しても良い」という条件で, なおかつ, 「mc1 や mc2 などは深度0以上で消せる」という条件付きで回答すると, ターゲットパスが間違っています。 mc0 の中に mc1.removeMovieClip(); と書いたら, mc0 の中の mc1 が消えます。 mc0 の中には mc1 など元から存在しませんね。 mc1 が存在するのはメインムービーのタイムラインである _root です。 したがって,書くべきスクリプトは, _root.mc1.removeMovieClip(); _root.mc2.removeMovieClip(); というように絶対パスを使うか, this._parent.mc1.removeMovieClip(); this._parent.mc2.removeMovieClip(); というように相対パスを使う必要があります。 「ターゲットパス」 http://homepage3.nifty.com/ginga-b/MX/targetpath.html  ~引用~ > バグの多くが、ターゲットパスの指定ミスでしょう。 その他 深度0未満のムービークリップを強引に削除する方法です。 fladdict.net blog 無理矢理にマイナス深度のMCを消去 http://www.fladdict.net/blog-jp/archives/2005/04/post_15.php mtFlash removeMovieClipで完全にMCを消去する方法 http://www.publicroots.com/fmt/archives/000067.html =================== > 2つ目は、 > Fumio Nonaka.com様の3D_Boxをmc2にコピーしたのですが、 > 立方体が表示されなくなってしまいました。 3D_Boxをmc2にコピーするという意味がよくわかりませんが。 そもそも 3D_Box はステージ上に構造物は全く何も必要なくて, ライブラリの中にビットマップ画像があって, それをスクリプトでステージ上に呼びだしているだけですよ。 そこまではよろしいでしょうか。 したがって, mc2にコピーするのはスクリプトだけです。 そして,ライブラリの中には, image0 ~ image5 という "識別子の付いたビットマップ画像" を用意しておく必要があります。 3D_Box のライブラリの中にあるビットマップ画像を右クリックして, 「リンケージ」を選択すれば, 識別子に image0 などが書かれてあるのがわかると思います。 ついでに  □ActionScriptに書き出し  □最初のフレームに書き出し にもチェックが入っていることもわかりますが, このチェックも入れておかなければその画像は表示されません。 こういう状況を作れば, mc2 の中でも 3D_Box はちゃんと出てきて動きます。 普通は,ムービークリップの中に何かを移すと, ターゲットパスが変わるのでうまく動かなくなることが多いです。 しかし,さすが巨匠 野中氏 だと思います。 3D_Box は,そういうことも想定してあるようで, 全て this など相対パスで書かれていますから, ムービークリップ の中にスクリプトを移動させても何の問題も起きないように考えられているようです。 ムービークリップの中に入れると, ステージの左上だった基準座標がムービークリップの基準点に変わるので表示される座標は変わりますよ。 でも座標が変わるからこそ, ムービークリップに入れると ActionScript を使わなくても表示座標を変えられたり便利に使えるのです。 どうやらその辺は想定内のことのようです。詰めは甘くないです。 3D_Box のスクリプト全てがわかるわけではありませんが, その辺のことはわかります。 ~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~ 前回の, #1の補足に書かれていらっしゃったことに対する回答を, 実はテキストエディタで書いてしまっていました。 もうすでに解決済みでいらっしゃるかもしれませんが, 書いたファイルを削除するのも何だなと思いましたので, ついでにその回答を以下に貼り付けておきます。 解決済みであれば無視してください。 =================== > ”画面キャプチャを利用しフレームの > 切り替え時にクロスフェードさせる。” > というページを発見しました。 なるほどー。 そういう方法もできますね。 私はそのページの方法自体すら考え付きませんでした。 > ”ScreenEffect.crossFade( 20 ); > //切り替えに要する時間を20とする。”を > ボタンX、ボタンY、ボタンZに貼り付けてハブリッシュしても > フレーム1、フレーム31、フレーム61に貼り付けて > ハブリッシュしても > クロスフェードできませんでした。 そうですか? こちらでもやってみましたが無事できましたよ。 例えば具体的には, フレームラベルA にジャンプさせるボタンに, ---------------------------- on (release) { ScreenEffect.crossFade(20); gotoAndPlay("A"); } ---------------------------- のようなことを書いたということですよね。 こう書けばできます。 なぜクロスフェードできないのかわかりません。 こちらでもうまく行かなければ, 解決する方法を模索することもできますが, うまく行ってしまうので,解決方法を模索することもできません。 注意する点は, パブリッシュ設定で Flash タブを選択して,   バージョン(V):[Flash Player 8   v]  ActionScriptの   バージョン(A):[ActionScript 2.0 v] にすることですが, デフォルトでは普通そうなっていると思うので, 注意する点というほどのものでもありません。 何にも考えなければ勝手にそうなっています。 > ダウンロードした(本家の)FLAファイルでも > ScreenEffect.crossFade( 20 ); > の20の部分を50にしたら > クロスフェードになりませんでした。 それはクロスフェードにならないと思いますよ(なってもわからない)。 その 20 や 50 は,引数として 外部AS で定義してある ScreenEffectクラス の crossFade() 内に送られます。 そして, 野を越え山を越え,三項演算で無記入時のエラー処理選別をされて, 結局,  cover.onEnterFrame = function(){   this._alpha -= this.tick;    … 略 …  } の this.tick に代入されます。 つまり ScreenEffect.crossFade(20); と書いた場合は,  cover.onEnterFrame = function(){   this._alpha -= 20;    … 略 …  } ScreenEffect.crossFade(50); を書いた場合は,  cover.onEnterFrame = function(){   this._alpha -= 50;    … 略 …  } が実行されます。 1フレーム進時間ごとに,アルファが 20 ずつ下がれば, 5フレームで アルファ が 0 になりますから, フェードアウトに見えることは見えます。 1フレーム進時間ごとに,アルファが 50 ずつ下がれば, 2フレームで アルファ が 0 になってしまいますから, フェードアウトには見えず,ほぼ一瞬で前の画像が消えてしまいます。 前の画像をフェードアウトさせる時間を長くしたい場合は, 数値を下げてください。 ですから, > //切り替えに要する時間を20とする。 と書かれてある日本語が変なのです。 あえて同様の主観的な日本語で書きなおすなら,  //切り替える速さを20とする。 とする方が適切なものに近いと思います。 ※当たり前のことですが,   ActionScript より日本語の方がずっと難しいですね。

rose_web
質問者

補足

お返事有難うございます。 まず初めに、前回の#1の補足への回答有難うございました。 //切り替えに要する時間を20とする。 の部分を勘違いして、数値を増やしてばっかりしていました。 次に、3D_Boxは my_mc._x = Stage.width = 200; my_mc._y = Stage.height = 0; と指定したら、表示されました。 単純なことに気がつくのが遅くて申し訳ないです。 前回の「ページの切り替えのフェードイン/フェードアウトについて」なのですが、 まず現状を説明します。 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ _rootの 1行目の1フレーム目にローディングバー 1行目の2フレーム目に教えて頂いたアクションスクリプトとstop(); 2行目の1フレーム目にキーフレームのみ(空欄) 2行目の2フレーム目にmc0 3行目の1フレーム目にキーフレームのみ(空欄) 3行目の2フレーム目にmc1 4行目の1フレーム目にキーフレームのみ(空欄) 4行目の2フレーム目にmc2 を配置および記入した状態になっております。(実際はmc10までありますが、mc0~mc3までと同じ配置の仕方です。) ・各mcには背景を付けていない状態です。(透明といえばいいのでしょうか?/ドキュメントの背景は白です。) ・各mcの1フレーム目と最終フレームにはstop();を書いています。 ・mc0にあるボタンBは(説明頂いた色でいうと、緑色のボタンです。) mc1を表示させたいので、 ------------ // 緑色のボタン クリックで on (release) { // mc1(緑MC)のアルファを 0 にする _root.mc1._alpha = 0; // mc1(緑MC)の深度を _root.dps に変更 _root.mc1.swapDepths(_root.dps); // mc1(緑MC)のフレームを2に戻してplay ← 変更 _root.mc1.gotoAndPlay(2);        ← 変更 // _root.dps の値に 1 を加算する _root.dps++; } ------------ を書きました。 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ mc0の最後に、写真が自動で切り替わるムービークリップを配置(表示)させています。 この時、ボタンBでmc1に移動すると、 mc1の下に、mc0の写真が自動で切り替わるムービークリップが表示され動いています。 (見えるのは、mc1の一番下の行に背景をいれれば見えなくはなるので構わないです。) このように、下で動いているmcが重なり合い、そして重なり合ったmcが動くことで >swfファイルの動きが大変遅くなってしまうという現象です。 が起きていると思い、 >不要になったMC(階層が一つ下になった時点/最上位階層でなくなった時点)をremoviMovieClip()で消滅させたい と質問させて頂きました。 以下の2つの方法か、それ以外にもいい方法があれば是非教えて頂きたいです。 ・removeMovieClipを使って消去して、ボタンを押したときにまた読み込む  unloadMovieを使って消去して、ボタンを押したときにまた読み込む (例えば、mc0→mc1に行ったとき、45フレーム目でmc1以外のmcを消去し、mc1に配置しているボタンで、ボタンに対応するmcを読み込むみたいな感じです。)  ※_root.mc0.removeMovieClip();みたいに_rootをでちゃんと指定したのですが、なぜかremoveMovieClipでは消去できませんでした。unloadMovieではちゃんと消去できました。 ・_rootの1行目アクションに、下の階層に行ったmcは、フェードイン/アウトが終わったら、そのmcの1フレームに移動  ※各mcの1フレーム目にはstop();だけが入っていますので、ここでストップさせれば消去しなくても動きが遅くなるようなことはないと思うのでこの案を提案しました。 是非ともよろしくお願いします。 使用環境 WindowsXP SP2 , Flash PRO 8

関連するQ&A

  • Flashでボタンをクリックするとフェードイン、フェードアウトする

    アクションスクリプト初心者なのですが、 スクリプトで、ボタンをクリックすると 現在のフレームのムービークリップがフェードアウトしながら、 次のページのムービークリップがフェードインする方法を ご存知でしたら、教えていただけないでしょうか。 ムービークリップがロードしたら、 フェードインするところまでは出来たのですが、 それだと、現在のムービークリップがフェードアウトしないので 困っています。 ムービークリップがロードしたら、 フェードインするスクリプトは、 onClipEvent (load) { _alpha = 0; } onClipEvent (enterFrame) { _alpha += 2; } と記載しております。 どうぞよろしくお願いします。

    • ベストアンサー
    • Flash
  • フェードイン、フェードアウトの「オバーラップ」について

    flash初心者です。 AS2.0です。よろしくお願いいたします。 ボタンでムビークリップを切り替える時、 フェードイン、フェードアウトの「オバーラップ」に したいのですが。 (A_mcがフェードアウトする同じタイミングで B_mcがフェードインする) ムービークリップが大量にあるので ムービークリップそれぞれに同一のスクリプトで フェードイン、フェードアウトを設定して効率化 したいと考えています。 フェードインは onClipEvent (load) { this._alpha = 0; } onClipEvent (enterFrame) { if (this._alpha<100) { this._alpha += 2; } } のようなスクリプトで実現できたのですが フェードアウトがわかりません。 ※イメージの関係でフェードアウトがどうしても必要になりました。 onClipEvent (unload) { } のようなタイミングで制御できればと 考えているのですが 具体的にアドバイスいただると助かります よろしくお願いいたします。

  • フェードイン・アウトについて

    アクションスクリプトを使用して、 ムービークリップをフェードインさせ 一定時間後にフェードアウトさせることは可能でしょうか? ご存知の方いらっしゃいましたら、 回答宜しくお願いします。 環境: Win XP FlashMX

  • 教えて下さい!ActionScriptで・・・

    Flash8をWindowsXP SP2で使用しております。 Fumio Nonaka.com様の3D_Boxについての質問です。 Fumio Nonaka.com様の3D_Boxのアクションスクリプトを、 フレーム1に記入して、 ボタンでフレーム2に移動するようにしていますが、 フレーム2に移動しても立方体が消えずにずっと描画されています。 どなたか消す方法を教えて下さい。よろしくお願いします。 <利用させて頂いているアクションスクリプトの掲載URL> http://www.fumiononaka.com/Sample/3D_Box/3D_Box.html 下段のSource to download (約192KB/Flash 8形式): 3D_Box.zip

    • ベストアンサー
    • Flash
  • スクリプトでサウンドのフェードイン、フェードアウト

    いつも、ありがとうございます。FLASH8です。 フレームスクリプトからのサウンドのフェードイン、フェードアウト制御についてお聞きします。 ナレーションがスタートしたらBGMをフェードアウト、ナレーションが終わったらBGMをフェードインさせたいのですが、見えないところにムービークリップを作ってムービークリップを読み込む度にサウンドレベルをプラス(マイナス)していき、それをフレームから変数を使って制御する方法で可能でしょうか?また、もっと良い方法があるでしょうか? よろしく、お願いします。

    • ベストアンサー
    • Flash
  • ボタンをクリックするとフェードイン、フェードアウトする方法。

    こんにちは、スクリプトでのフェードイン・フェードアウト表示についての質問なのです。ヴァージョンはFlash MXです。 既存の質問で Flashでボタンをクリックするとフェードイン、フェードアウトする。 の応用を教えていただきたいのですが、 http://oshiete1.goo.ne.jp/qa2766651.html ステージ上にあるいくつかのボタンを押した時に、ある表示部分がフェードアウトし新たな画像がフェードインで表示するようにさせたいのですが、この時各ボタンによって表示部分を変えたい、つまり /////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////// ///////////////////////////表示画像//////////////////////// /////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////// ボタンA ボタンB ボタンC ボタンD ボタンAをクリック時にA画像を ボタンBをクリック時にB画像を フェードイン・フェードアウト表示させたいのです。 つまりフェードアウトした後指定したフレームへ移動させたいのです。 これを複数ボタンで分ける方法がわかりません。 ボタンが一つなら on (release) { // ムービークリップ my_mc 内の変数 flag の値を 1 にする _root.my_mc.flag = 1; } のmy_mcの部分をその画像のインスタンス名へ変えればできるのですが、ボタン数が複数になると一つしか指定できないのでこのやり方では無理です。 ムービークリップがボタン代わりであれば直接スクリプトを書いて on (release) { // 変数 flag の値を 1 にする flag = 1; } と命令することもできるのですが。 質問が分かりにくくて申し訳ありません。 もしご存じの方がおられましたら教えていただきたいです。 よろしくお願いします。

  • パスの書き方 AS3

    シーン1にムービークリップ(インスタンス名mcop)を配置し、mcopの1フレームにムービークリップ(mc)とobject1(グラフィック)を配置、mcの1フレーム目にアクションスクリプト(ActionScript3)を配置します。 アクションスクリプトからobject1を非表示にする指示を出したいのですがうまくできません。 パスの書き方をアドバイスください。(同階層ではうまく非表示に出来ます。) root.mcop.object1.visible = false;  こんな感じでやってみましたがだめでした。

    • ベストアンサー
    • Flash
  • Flash Lite1.1でActionScriptを使用してのフェードイン・フェードアウトについて

    こんにちは。 ActionScript初心者です。Flash Lite1.1でActionScriptを使用してのフェードイン・フェードアウトについて教えて下さい。 FlashLiteではonClipEventが使えないそうだったので ムービークリップ内の1フレーム目に _alpha=0; 2フレーム以降毎に _alpha+=10; と記述すればフェードイン出来ましたが、もっとスマートにやる方法があれば教えていただけますでしょうか。 以上よろしくお願いいたします。

    • ベストアンサー
    • Flash
  • ムービークリップ内のボタン

    フラッシュ初心者です。 アクションスクリプトがうまく動かず困っています。 シーン1にムービークリップ1(インスタンス名:mc1)とムービークリップ2(インスタンス名:mc2)が置いてあります。 mc2の中にはボタンAを配置してあり、ボタンAをクリックすると、mc1のフレームラベル(B)に飛ぶような制御をしたいです。 ボタンAに記述してあるスクリプトは以下です。 on (release) { this._parent.mc1.gotoAndplay("B"); } しかしクリックしても全く動きません。 絶対パスで指定してもダメでした。 ちなみに、ためしに、mc1ではなく、シーン1上のフレームラベルに 飛ばすように記述したら普通に動きました。。 何か記述間違いがあるのでしょうか? 分かる方がいましたら教えてください。 お願いします。

  • カーソルのカスタム

    flash ver.9 AS2.0 使用です。 カーソルを自分で制作したムービークリップ(MC)にする方法を教えていただきたいです。 MCに直接スクリプト onClipEvent (mouseMove) { _x = _root._xmouse; _y = _root._ymouse; } を書く方法は分かるのですが、 知りたいのは フレームアクションで制御する方法です。 多分、とても初歩だと思うのですが、よろしくお願いします。

    • ベストアンサー
    • Flash

専門家に質問してみよう