停止してしまうgotoAndPlay

このQ&Aのポイント
  • フレーム上のスクリプトとクリップイベントの動作制限について分からない
  • ムービークリップが特定の場所に到達した時に停止しているアニメーションを再生したい
  • onClipEvent (enterFrame)内でthis.gotoAndPlayが無効なのかどうか疑問
回答を見る
  • ベストアンサー

停止してしまうgotoAndPlay

愛想尽かされてしまいそうなのですが 質問をさせて頂きます。 どうも、フレーム上に書くスプリクトと クリップイベントの動作制限がイマイチ分かりません。 ある、ムービークリップがステージに配置されており onClipEvent (enterFrame)で移動制御しています。 (this._x-=5てな具合です) そのムービークリップは30フレームほどで形成されており しょっぱなのフレームでstop();をかけ、ムービークリップが自動的にアニメしないように停止させています。 で、on (press) にてそのムービークリップが マウスで押されたときにthis.gotoAndPlay("ラベル名");と、 その停止されていたムービークリップがマウスダウンをきっかけに動くといったものです。 ※ ここまでは思惑通りに進行できたのですが・・・・ マウスが押されるとか押されないとかは別に 例えば時間的に又はムービークリップがある一定の場所に到達したときに 停止させてたアニメを動作させたいのです。 私なりに考え、 onClipEvent (enterFrame)の命令の中で IF文にて座標を調べ特定の場所に着たので this.gotoAndPlay("ラベル名");にて動作させようとしたら ダメでした。 画像は変化しているので、ジャンプはしているようなのですが 何故か1コマで停止しているようです。 onClipEvent (enterFrame)内で this.gotoAndPlayは無効なのでしょうか? 手引書にはそれぞれの機能説明はありますが 使用制限が記載されていないので どういう間違いを犯しているのかわかりません。 上記、宜しくお願い致します。 尚、本件は別欄でご質問させて頂いてます物とは 別扱いとなります。 (質問ばかりでスミマセン。何かお勧めの手引書でもあれば教えて下さい)

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

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

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

#1の者ですぅ。 Flash4の件は無視しておいてください。ぜんぜん参考になりませんから。 『_parent』は MX2004の「ActionScript リファレンスガイド」(ヘルプ) にもちゃんとあります。 ------------------------------------ _parent Player Flash Player 5。 シンタックス _parent.property _parent._parent.property 説明 識別子; 現在のムービークリップまたはオブジェクトを含むムービークリップまたはオブジェクトへの参照を指定するか、返します。現在のオブジェクトとは、_parent を参照する ActionScript コードがあるオブジェクトです。現在のムービークリップまたはオブジェクトの上位のムービークリップまたはオブジェクトへの相対パスを指定するには、_parent を使用します。 ----------------------------------- また,「ActionScript ユーザーガイド」(※PDFです。重いです。) http://download.macromedia.com/pub/documentation/jp/flash/mx2004/fl_usingas_in_flash.pdf P.29「ドットシンタックス」 P.96「_root の不使用」 あたりにもあります。 要は相対パスです。 Flash4だと ../ になります。 私は ../ の方がなんとなくわかりやすいです。HTMLの相対パスに近いですから。 ファイルと言うよりフォルダに近いので,HTMLのパスとは少し意味合いが違いますけどね。 _root とか _parent とかいう書き方はFlash5から使用されているものです。 ---例----------------------- メインアニメーション    ┗親MC(インスタンス名:oya)      ┣子1MC(インスタンス名:ko1)      ┗子2MC(インスタンス名:ko2) --------------------------- 「子1MC」のパスをメインアニメーションからの絶対パスで書くと, _root.oya.ko1 となります。 「子1MC」のパスを「子2MC」から見たときの相対パスで書くと, this._parent.ko1 または _parent.ko1 となります。 「子1MC」のパスを「親MC」から見たときの相対パスで書くと, this.ko1 または単に ko1 となります。 「子1MC」のパスを「子1MC」(自分自身)から見たときの相対パスで書くと, this. または,無記入 となります。 「親MC」のパスを「子1MC」から見たときの相対パスで書くと, _root.oya となります。 「親MC」のパスを「子1MC」から見たときの相対パスで書くと, this._parent. または _parent. となります。 注意する点は,ko1 などMCからの相対パスは, ko1 内のフレームに書いても,MC自体に直接書いても,パスは同じになると言う点です。 なんとなく,MCに直接書くとMCの外側の皮に書いた気になりますが(私だけ?),実はMCの中に書かれているのです。 ですから,MCに直接書く場合も,MCの中のフレームから見たときのパスをイメージすると間違いにくいです。 パスの始まりは,「_root」と「_parent」と「this」の3つです。簡単に覚えられますね。 日本語で言うと, 「_根」と「_親」と「_これ」です。スクリプトのままの方がわかりやすい気がしますが…。 この3つ以外のパスの部分は具体的なオブジェクトのインスタンス名になります。 絶対パスで書くと,_root.oya.gotoAndPlay(**); みたいになり,子から見た親を言うだけでも,必ず親MCのインスタンス名が必要になります。 親MCのインスタンス名は,ご質問の回答では不用ですから _parent にしました。 また,任意にたくさんこのようなMCを作った場合, _root.oya1 _root.oya2 _root.oya3 …… のように作った数だけ,スクリプトのパスを変えなければなりません。 これが面倒な場合,または不可能な場合は,_parent を使用した方が良いです。 私の頭の中のイメージと,ここ↓の図のイメージは上下が反対なので,イマイチわかりにくいですが。 http://f-site.org/articles/2002/01/26153958.html >> 手引書を紹介していただくことは可能でしょうか? >> (この掲示板では固有名詞を発するのは禁止?) 書籍などの固有名詞を発するのは大丈夫ですよ, サイト名やリンクがOKなのですから。 ただ自分個人の固有名詞やサイト名はダメでしょう(^_^)。 しかし,手引書と言われても私の意見など聞いても参考になりませんよ。 昔はけっこう本を持っていましたが今は(今のバージョンは)持ってないに等しいです。 情報源は  ネット:ヘルプ=2:3 くらいです。 ヘルプですけど… MXのヘルプは,ヘルプ(フレーム使用のHTMLの集合体)だけ,切り離して,いつでも使えるようにMOなどに持っています。 またデスクトップにヘルプのショートカットを用意しています。 そうしているとソフト本体を起動することなくヘルプを見ることができます。 でもMX2004はそう簡単に切り離せません。 というか切り離すのは簡単ですが,お互いのページ(HTML)どうしにリンクがかかっていませんから, HTMLの集合体を持っていても使いようがありません。 それで,CHM(HTMLヘルプ)ファイルに自分でコンパイルして,CHMを持ち歩いています。 Flash5のヘルプも持っています。Flash4は当然。 (って何のために…?) Flash3のヘルプがほし~ぃ。(ヘルプマニアか!?) Flash2・1は英語しかないと思うからいらん。(どーでもエエって!) Flashのヘルプはハッキリ言ってスカッと役立つヘルプではありません。 でも使い慣れた人が何度も読み返しているとだんだん意味がわかってくるようにはなっています(意味ないじゃん)。 という感じですね。

irukacyan
質問者

お礼

全てにおいて納得しました! (けど、作成の工程で頭の中がこんがらがってきました) 紙に書きながら頑張ります! ありがとうございました。

その他の回答 (2)

noname#35109
noname#35109
回答No.2

#1です。 以下,#1の補足ではなく#1の蛇足です。 ちょっとした懐古心から… 「ムービークリップにスクリプトが書けなくたって…  entarFrameなんてなくたって…  同様なことは昔からできたんだ~い。」 てなわけで,Flash4で#1と同様のことを再現。 実際,Flash4まではムービークリップ自体にはスクリプトが書けず, entarFrameとかいうハイカラなスクリプトもなかったです。 でも,同様のことはできました。 ボタン以外にはフレームにスクリプトを書くしかなかったのでムービークリップが大活躍します。 動く,親MCの中に2つ子MCを作る必要があります。 まず1つ目は親MCを動かす用のMCです。 このMCの中を2フレームにします。そして 1フレームのフレームスクリプトには --------------------------------------- Set Variable:"pos" =GetProperty ( "../", _x ) Set Property ("../", X Position) =pos - 5 --------------------------------------- 2フレームのフレームスクリプトには --------------------------------------- Go to and Play (1) --------------------------------------- これで,このMCは 1フレームと2フレームを行ったり来たりするので, 1フレームに戻るたびに, GetPropertyで,親(../)のxポジションを求め, Set Propertyで,親のxポジションを今より-5移動させるMCが完成します。 次に,親MCのxポジションが200以下になったら,親MCを"label1"フレームにgotoさせるMC。 このMCも中を2フレームにします。そして 1フレームのフレームスクリプトには --------------------------------------- Set Variable:"pos" =GetProperty ( "../", _x ) If (pos<= 200)   Begin Tell Target ("../")      Go to and Play ("label1")   End Tell Target End If --------------------------------------- 2フレームのフレームスクリプトには --------------------------------------- Go to and Play (1) --------------------------------------- これで,このMCは 1フレームと2フレームを行ったり来たりするので, 1フレームに戻るたびに, GetPropertyで,親(../)のxポジションを求め, もしそのポジションが,200以下になったら, Tell Target で親に "label1" に行け! って命令するMCが完成します。 (↑全てのスクリプトコピペ不可能。) 『もし"label1"に行ってもこの2つ目のMCがいたら, 親MCは"label1"に行き続けるので,いつまでたってもPlayしません。』 だから,このMCは1フレームにだけ存在させるMCになるのです。 両方のMCとも2フレームしかなく,その2フレーム間を行ったり来たりさせて,再計算させています。 これが,今でいう entarFrame です。 entarFrameと,それが無効になったように見えるイメージはわかりました? って,よけいわかりにくくなりましたか…。

noname#35109
noname#35109
回答No.1

どもです。 最近多忙につき,ちょっとしか考える時間がありません。 衝突判定は専門外なのでよくわかりません。(ココで言い訳。) >> onClipEvent (enterFrame)内で >> this.gotoAndPlayは無効なのでしょうか? 無効なのではなくて, 理論的に考えると「何故か1コマで停止しているようです。」 となるのは当たり前ですよ。 enterFrame = 1フレーム進む時間ごとに毎回{ }内を実行 なのですから,毎フレーム時間(1/12秒)に1回,"ラベル名"のフレームに行き続けます。 せっかく前に進もうにも,また"ラベル名"のフレームに戻されてしまいます。 だから止まっているように見えるのです。実際は行こうか戻ろうか,困っている状態だと思います。 だから動くMC(以降「親MC」とします)自体には, --------------------------- onClipEvent (enterFrame) { this._x -= 5; } --------------------------- みたいなのでそれ自体の座標を動かしておいて, その親MCの中の1フレームには --------- stop(); --------- と書いておいて止めておいて, 1フレームだけに存在する子MCを親MCの中につくって その,子MCに ----------------------- onClipEvent (enterFrame) { if (_parent._x<=200) { _parent.gotoAndPlay("label1"); } } ---------------------- のようなことを書くのが簡単な回避策だと思います。 「子MC」は「親MC」の1フレームだけにしか存在しない, つまり,2フレーム以降は存在しないので, このenterFrameは2フレーム以降,消えます。

irukacyan
質問者

お礼

sasakunさん、本当に毎回スミマセン。 しかもご多忙なようで、こんなつまんない質問に 時間を取らせ申し訳なく思います。 FLASH4での作成方法は理解するに時間がかかりそうです。 今日はめずらしく朝からお客さんのとこにいかなくては ならないので後でじっくり検証したいと思います。 ところで、enterFrameの理屈はなんとなくですが 分かりました。 FLASHに無茶な注文をしていたようです。 (納得できない矛盾もあるような気がしますが FLASHも精一杯頑張ってくれてるんだなと納得) 回避策のスプリクトを参考に後で頑張ろうと思います。 しかし、parentという命令が何者なのかが分かりません。 手引書の索引にも記載されていませんでしたし ヘルプを見ても出てきません (ヘルプの使い方がイマイチなのですが。。。) お手数ですが、parentについて簡略で結構なので どういったものなのかお時間あるときでも 教えて頂ければ幸いです。 あと、それら優れもののスプリクトが説明されている 手引書を紹介していただくことは可能でしょうか? (この掲示板では固有名詞を発するのは禁止?) 色々お手数ばかりかけて申し訳ございません。

関連するQ&A

  • MCのgotoAndPlay制御について

    今現在すごく初歩的なものを作っています。 まず、MCですが、1~10フレームは歩く動作、11~20フレームは座る動作 と言ったフレームで動作を表現したものです。 このMC内で1~10フレームを繰り返すようにgotoAndPlay(1)と10フレーム目に書きました。 そして、このMCに onClipEvent (load) { // スピードの初期値 spd = 5; } onClipEvent (enterFrame) { // spd ずつ右へ移動 this._x += spd; if(this._x>100){ spd = 0; this.gotoAndPlay(11); } } といったように A地点~B地点は歩いている動作をさせながら5ずつ移動させ、100まで来たら停止させ、 そのB地点では座る動作(MCの11フレーム目から)をスタートさせるようにしました。 しかし、実際はMCの11フレーム目で固まった状態です onClipEvent (enterFrame)なので当たり前なのは分かっているのですが、 他に方法が分かりません。 何かなるべく完結な方法はありますでしょうか?

    • ベストアンサー
    • Flash
  • センターに配置

    一つのムービークリップに onClipEvent (enterFrame) { xm = (Stage.width-this._width)/2; ym = (Stage.height-this._height)/2; this._x += (xm-this._x)/4; this._y += (ym-this._y)/4; } というアクションシュクリプトを書いています。 ところがです! そのムービークリップに on (release) { gotoAndPlay("01"); } と追記して指定のフレームラベル"01"に飛んでくれましぇん… なぜでしゅか? ムービークリップの中にボタンを入れて on (release) {...を記入したりまたが だめです。 ボタンをウィンドの上下左右センターに配置する方法、 もしくはムービークリップが指定のフレームラベルに行ってくれる方法を教えて下さい!!! もう、うんこしていてドアを開けられたときくらいびっくりしています。いや、苦しんでいます。

  • ムービークリップ再生後次のフレームへ移動しません

    アクションスクリプトを使って、テキストが下から上へ流れるようにムービークリップを再生し、テキストが流れ終わったところで次のフレームへ移動させたいのですが、フレームが移動せず困っています。 スクリプトは色々なところで調べて、やっとの事で下記のように書きました。 使用しているのはFlash MX 2004 です。 |○  □|○|  ←1.スクリプトレイヤー |●    □|  ←2.ムービークリップレイヤー |○|●→|●|  ←3.ムービークリップ後に再生したいレイヤー 1.のスクリプト(2つのキーフレームいずれとも) stop(); 2.のムービークリップのスクリプト onClipEvent (load) { spd =5; onClipEvent (enterFrame) { this._y = this._y-spd; if (this._y<=-10) { spd = 0; gotoAndPlay(2); } } 知り合いにお見舞いのメッセージをと思って作ったのですが、送ることが出来なくてとてもあせっています。 どうぞよろしくお願いします。

    • ベストアンサー
    • Flash
  • Flash MX ActionScriptのEnterFrame

    Flash 初心者です。 クリップアクションの、 onClipEvent (enterFrame) { } がいまいちよくわかりません。 フレームが1フレームだけのルートのタイムラインに、 何の動きもないムービークリップオブジェクト(これも1フレームのみ)を1つ置いたとします。 そのムービークリップに、例えば、 onClipEvent (enterFrame) { _rotation+=20; } とアクションをつけたとします。 これを再生すると、回転し続けますよね。 これはルートのタイムラインが1フレームだけでも、 それがループしていると考えると、納得できるのですが、 1フレーム目に、this.stop();を記述しても、 回転し続けます。 enterframeとはどのように解釈すればいいのですか? ルートのタイムラインが再生される度に呼び出されるということでは ないのでしょうか? よろしくお願い致します。

  • 移動に関するアクションスクリプトがわかりません

    あるムービークリップをクリックした時にX座標を0の位置にもっていきたいのですが、アクションスクリプトをどう書いたら良いのか分かりません。 瞬間的に移動するのではなくスーッという感じで動かしたいのです。 on (release){ this._x = 0} と onClipEvent(enterframe){ this._x += -2 } これを融合させたような感じにしたいのですが、書き方が分かりません。メインのタイムラインに動くフレームをつくりgotoAndPlay()で飛ばしても良いんですが、アクションスクリプトだけで作ることは不可能でしょうか?

    • ベストアンサー
    • Flash
  • 【読み込み時間orロード画面】

    一番最初に待ち時間に出せる アニメの作り方について質問を投げさせて貰います。 よくある待ち時間画面ですが、 他のサイトを参考にソースをコピーして 動作を確認しておりましたが、 どうしても画面がまっしろなままから 全部読み込んではじめて動くみたいで、 困っております。 1フレーム目にある、 ムービークリップにこのようなソースを書きました。 onClipEvent (load) { stop(); } onClipEvent (enterFrame) { if (100 == Math.floor(_root.getBytesLoaded()/_root.getBytesTotal()*100)) { gotoAndPlay(2); } } 【フレーム2】には、【フレーム3】に飛ぶボタンを用意してます。 一度、【シーン1】ですべてのデーターを読み込んで 【フレーム2】に読み込み完了!と表示させ、 【フレーム3】に飛んで初めて動くようにしたいのですが、 いったい、ロード時間が最初に出てこない理由は なにか、アドヴァイスお願いします。。。

    • ベストアンサー
    • Flash
  • onClipEvent(enterFrame)よりもフレームに書いたほうが良い?

    最近Flashでfunctionの使い方を勉強しています。 そこで思ったのですが、例えばあるキーが押されたときに動作を行なわせたい場合。ムービークリップにonClipEvent(enterFrame)で記述する方法とフレームにfunctionで記述する方法の2通りあります(もしかして他にも方法あったりします?)。 素人考えでは、例えばonClipEvent(enterFrame)にtrace文を書いた場合、ずっとtrace処理が行なわれますが、フレームに書いた場合はそのフレームが読み込まれた瞬間のみtrace処理が行なわれます。一見onClipEvent(load)のようですが読み込み後、たとえフレーム移動がそこでstopになったとしても、イベントハンドラによって処理を行なわせることは可能です。そう考えると、処理の軽さ的にはフレームに記述する方法の方が優れているのでしょうか? ムービークリップにonClipEvent(enterFrame)で記述する場合とフレームにfunctionで記述する場合、両者の長所・短所も合わせて紹介していただけると助かります。 以上になります。よろしくお願いします。

  • ムービークリップの領域をシェイプの形状にしたい

    よろしくお願い致します。 ムービークリップにマウスオーバーするとムービークリップが再生し、マウスアウトすると逆再生するというものを作っています。 ここで、ムービークリップのマウスオーバーする領域を矩形ではなく、見たままの形(シェイプの形状)だけに指定するにはどうすれば良いでしょうか? 現在の状況は、マウスオーバーさせるムービークリップに onClipEvent (load) { this.stop(); } onClipEvent (enterFrame) { if (this.hitTest(_root._xmouse, _root._ymouse, false)) { this.nextFrame(); } else { this.prevFrame(); } } のアクションを書いています。 自分なりに調べたところ、「shapeFlag?というものを使うらしい?」というのは分かったのですが、どう使えば良いのかさっぱり分かりません・・ どなたかご指導頂けないでしょうか。 どうぞよろしくお願い致します。

    • ベストアンサー
    • Flash
  • mcの中のフレームラベルの移動

    初めまして。 当方初心者なので、よくわからないので、質問させていただきます。 外部にswfとしてフレームラベルの複数ついたものがあって、 それをmc(mcs_mc)で読み込みし、スクリプトで一定時間毎に mcに読み込んだ外部swfのフレームラベル(chapter1~chapter10)を移動させたいのですが、うまく動いてくれません。 どの用にしたらよいでしょう?よろしくお願いします。 onClipEvent(load){ this._lockroot = true; } onClipEvent(enterFrame){ setInterval( function(){ mcs_mc.gotoAndPlay("chapter2"); }, 1000); }

    • ベストアンサー
    • Flash
  • gotoAndPlayで反応がありません。

     ムービークリップ内のボタン(ボタンは複数存在しています)[プルダウンメニューを作成しました]に対して、 on (release) { gotoAndPlay("フレーム番号"); } と記述し、フレーム移動をさせようとしたのですが、 反応がありません。 Flashを使い始めてまだ間もなく、アクションスクリプトも初心者です。 フレームアクションは、キーフレームに設定しないといけないと参考書に書いてあったのですが、そうするとムービークリップ内のボタンには、gotoAndPlayの使用はまちがっているのでしょうか? フレームアクションではないのですが、同じ部分に on (release) { getURL("**.html"); } と記述すると問題がなく動きます。 過去の質問も読んでみたのですが、どの質問が自分の疑問に当てはまるかよくわかりません。 どなたかご教授願います。 以上の文章で理解しにくければ、追記致します。

    • ベストアンサー
    • Flash

専門家に質問してみよう