• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:ムービーの指定フレームでの停止方法について)

ムービーの指定フレームでの停止方法について

このQ&Aのポイント
  • ムービーの指定フレームでの停止方法がわからない
  • 指定のフレームでの停止がうまくいかない
  • 浮き上がる泡のアニメーションを止めたい

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

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

#1です。 >> 泡を止める+消す(単純に消すだけでも同じかもしれませんが) >> というものにしたかったのです。 そうですよね。 止めたは良いけど,止めてどうするんだろう? と思っていました。 単純に消すだけでも同じだと思うので消すスクリプトを書いておきます。 ------------------------------- //stop(); bubble._visible = false; for (i=0; i<30; i++) { removeMovieClip("bubble"+i); } ------------------------------- となります。止めるよりずっと簡単です。 1行目の //stop(); は#1で書いたのと同じ理由でつけてあります。場合によっては // を取ってください。 対象を「12-13a.fla」の1つにしてくれると,説明もしやすいので,これについて解説しておきます。 上のをコピペするだけでも使えるので以下は無視してくださってもかまいません。 = = = = = = = = = = = = = = = = = = = = = = = = #1で書いたとおり, これは1つの bubble というインスタンス名の泡があって,この中に,自分自身を任意の位置に移動させ,任意の大きさにし,上方向に動かすスクリプトが書いてあります。 止める場合は,ここの記述を理解して,どこを突けば止まるかを考えなければなりませんが, 消す場合は,ここの記述はまったく関係ありません。単に消せば良いだけになります。 ポイントは,このムービーのタイムラインの1フレーム目のスクリプト ------------------------------- for (var i = 0; i<30; i++) {   bubble.duplicateMovieClip("bubble"+i, i); } ------------------------------- です。ここに注釈を入れると以下のようになります。 ------------------------------- //変数 i の初期値は0で,i を1ずつ加算し,29まで以下をループ for (var i = 0; i<30; i++) {   //bubbleを深度 i に,"bubble"+i というインスタンス名で複製    bubble.duplicateMovieClip("bubble"+i, i); } ------------------------------- という感じになります。 ポイントは,duplicateMovieClip です。 これは,ムービークリップを複製するスクリプトで,これの逆が, removeMovieClip ムービークリップを消すスクリプトです。 duplicateMovieClip(複製) と removeMovieClip(消去) は対のようなものなので覚えておいた方が良いと思います。 とくに removeMovieClip(消去) をネットで検索したり,本で調べると,かならず,duplicateMovieClip(複製)に関する事項が書いてあると思います。 duplicateMovieClip(複製)で作成されたものは,removeMovieClip(消去)で消せるのです。 でも,removeMovieClip(消去) は,普通 duplicateMovieClip(複製) されたムービークリップしか消せません 。 本当はそうではなくて, duplicateMovieClip("bubble"+i, i); の最後の i が絡んでいます。 この i は深度で,深度が0以上のムービークリップでないと消せないのです。 深度とはレイヤーのことです。深度の数が大きいほど上のレイヤー,つまり手前に表示されるレイヤーになります。 タイムラインで見えているレイヤーは深度が-1以下です。 i には 0~29までが入ります。0以上の数ですから,それより上のレイヤー0~29に泡を複製しています。 この,タイムラインのレイヤーでは作ることのできないさらに上のレイヤーに複製したものだけが消せるのです。 この回答の最初に書いた, removeMovieClip("bubble"+i); では,duplicateMovieClipで複製された深度0~29のムービークリップを消しています。 でも,これでは最初の複製元のbubble自体が消せないので, bubble._visible = false; でbubbleを消しています。正確には消しているのではなくて「_visible = false;」非表示にしてあります。 「_visible = false;」も覚えておいた方が良いです。なかなか便利です。消したい物を消せるので。 また逆に「_visible = true;」で非表示が表示になります。

mune727
質問者

お礼

大変わかりやすい説明で、すんなりと泡達を消すことができました。 ひとつひとう丁寧に教えていただきましてありがとうございます。 自分もスキルを磨いて、どこかからか持ってきたスクリプトではなく、自分で色々と記述できるように努力していきます。

その他の回答 (1)

noname#35109
noname#35109
回答No.1

圧縮ファイルを解凍すると 「12-13.fla」と「12-13a.fla」の2つができますよね。 この2つは似ていますが,泡の出るしくみが少し違うので,止める方法も若干違います。 2つとも,フレームを使った動きではなく, ActionScriptで動かしているので,当然, stop(); では止まりません。 stop(); はフレームを止めるときに使うものです。 ●「12-13.fla」 これは19個の泡のムービークリップのインスタンスからできています。 それぞれのインスタンスにはインスタンス名が付いていないので,外部から命令しにくいです。 とりあえず19個に名前を付けましょう。 例えば一番左の泡を選択して,下のプロパティパネルの <インスタンス名> となっているところに名前を付けてください。 とりあえず awa1 と付けることにします。その横や上やを選択して同じ要領で, awa2 awa3 awa4 …… awa19 と付けてください。 そして,止めたいフレームのフレームアクションとして, ------------------------------------ for (i=1; i<=19; i++) { eval("awa"+i).onEnterFrame = null; } ------------------------------------ と書いてください。 そのフレームで泡の動きは止まります。 泡は this.onEnterFrame = function() { ~~ ~~ というスクリプトで動いています。 上記スクリプトはこのonEnterFrameを一斉に止めるスクリプトです。 ●「12-13a.fla」 これは, bubble というインスタンス名が付いた泡が真ん中に1つあるだけで, この中に動くスクリプトが書いてあります。 この動くムービークリップをタイムラインのスクリプトでコピーして大量発生させています。 これは,止めたいフレームのフレームアクションとして, ------------------------------------ //stop(); bubble.bouyancy = 0; for (i=0; i<30; i++) { eval("bubble"+i).bouyancy = 0; } ------------------------------------ と書いてください。 最初の行に,//stop(); と書いていますが場合によってはなくても良いですし, 場合によっては, // を消して, stop(); にしてください。 この stop(); は泡の動きを止めるための stop(); ではなく,ムービーがループ再生をしてしまうのを防ぐための stop(); です。 せっかく泡の動きを止めても,1フレームに戻るとまた複製されて動き出すからどこかで必要です。 泡を止めたあとも,アニメーションが続く場合は //stop(); を取ってください。でないとその後アニメーションが進まなくなります。いつかどこかで,stop(); を書いて,ムービーのループ再生を避ければ良いです。 上の2つは,スクリプトの急所を狙って,スクリプトを止めています。 他の方が作られたサンプルなどを利用する場合は,なるべくそのスクリプトを理解した上で使ってください。理解できないうちはなるべく使わない方が良いです。 思いもしない所で暴走したり,制御できなくなったりしますし,いつまでたっても他の方が作られた物でしかFlashをつくれないようになってしまいます。

mune727
質問者

お礼

早速の回答ありがとうございます。 上記の「12-13a.fla」で作業をしていたのですが、泡の動きは止めることができました。 しかし、自分の言葉が足りず、泡を止める+消す(単純に消すだけでも同じかもしれませんが)というものにしたかったのです。 二度手間になって申し訳ありませんが、消す方法もあるのでしょうか?

関連するQ&A