- ベストアンサー
ActionScript3.0でムービークリップを入れ子にしてストップさせる方法
- ActionScript3.0を使用して、ムービークリップ(town1)の中にムービークリップ(park)を作成し、マウスオーバー時にtown1を停止させる方法を教えてください。
- 試しにtown1.park.addEventListener(MouseEvent.MOUSE_OVER,rolloverHandler);と書いてみましたが、うまく動作しません。
- アクションスクリプトのコードをご確認いただき、問題点を教えていただけますか?
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
#1&2 です 返事が大変遅れてしまいすみません。 > 「town1」はムービークリップに変換し、 > モーショントゥイーンで動かしています。 ということは root(メインのタイムライン)のフレームを使って 「town1」というインスタンス名のムービークリップを移動させている。 ということになるのではないかと思います。 もしそうであれば 「rootのタイムラインを止める必要がある」 ということになります。 したがってその場合は ご質問で書かれていらっしゃる次の文↓を function rolloverHandler(event):void{ town1.stop(); } 次のような感じ↓に変える必要があります。 function rolloverHandler(event):void{ MovieClip(root).stop(); } しかし。。。 もしそうであると, ムービー自体は Spriteクラス を継承したものではなくて MovieClip を継承したクラスになると思います。 そうである場合は ご質問で書かれていらっしゃる次の文↓を public class komoTown extends Sprite{ 次のように↓に変える必要があると思います。 public class komoTown extends MovieClip{ これに限らず, ドキュメントクラスのクラスファイルは だいたいどの場合も extends MovieClip にしておくのが無難だと思います。 Flash 自体は=Flashのメインタイムラインは ムービークリップの一種ですから。
その他の回答 (2)
- BlurFiltan
- ベストアンサー率91% (1611/1754)
#1です。 > 「街」は真横から見た景色になってまして、 > 左から右へスクロールしていまして、 > 無限にループさせている状態にしています。 それは 「見た目」 の問題で 「どのようにしてそう動かしているのか」 が全くわかりませんが, 私の 「単なる主観(フィーリング)」 で見たところ #1で私が書いた > 「town1」内は,少なくとも2フレーム以上のフレームからできていて, > 再生されている状態 にはなっていないのではないかと思います。 もちろん, > 「town1」内は,少なくとも2フレーム以上のフレームからできていて, > 再生されている状態 にしてもそのようなことはできますが, そうではなく なんとんなく 『「town1」 "自体" を何らかの形で動かしている』 ように思えます。 私の主観では 『「town1」 "内" のタイムラインを再生させて町を動かしている』 のではなく 『「town1」 "自体" を何らかの形で動かしている』 と思えるということです。 もしそうである場合は 「town1.stop();」 では止まりません。 「town1.stop();」 は 『「town1」 "内" のタイムラインを再生を止める』 という意味で 『「town1」 "自体" を何らかの形で動かしているのを止める』 という意味ではないからです。 『「town1」 "自体" を何らかの形で動かしている』 のでしたら その動かしている原動力を止めてください。 どうやって 「town1」 "自体" を動かしているのかわからないため それ以上答えようがありません。
補足
ありがとうございます!! >『「town1」 "自体" を何らかの形で動かしている』 ように思えます。 そうです!!「town1」自体を動かしているんです!!! うまく説明が出来てなくて申し訳ありません!! そして「town1」内で動かしているフレームはありません。(すみません#1でも言っておられましたね汗) ただ「town1」内にいくつか「家」や「公園」などのインスタンス(というんでしょうか?)を作っていまして、その「公園」などの建物自体は動いてはいないんです。 動かしているのは「town1」(街全体ごと)”自体”をスクロールさせて動かしています。 「town1」はムービークリップに変換し、モーショントゥイーンで動かしています。 こんな感じなのですが大丈夫でしょうか? ほんと説明ヘタで申し訳ないです! もし解決策あればよろしくお願いします!!
- BlurFiltan
- ベストアンサー率91% (1611/1754)
実際に「町」やその中に「公園」の絵を描いて 書かれていらっしゃるような構造を作成し(↓下図) 書かれていらっしゃるままのスクリプトで試しましたが 普通に動作しましたよ。 ~~以下 確認です~~ > 下のように、parkをクリックしたときに > town1を停止させたく書いてみたのですが まず 「parkをクリックしたとき」 は 「parkをマウスオーバーしたとき」 の書き間違いですよね? これ↑はどうでも良いのですが 重要なのは 「town1を停止させたく」 の意味です。 スクリプトを見る限り 「town1を停止させたく」=「town1内のタイムラインの動きを停止させたく」 という意味になりますがそれでよろしいですよね? つまり 「town1」内は,少なくとも2フレーム以上のフレームからできていて, 再生されている状態ということになります。 ※私は「town1」内のフレームを100フレームほどにして 「town1」内で赤い玉のグラフィックインスタンスをモーショントゥイーンで動かしました。 そして 「town1」内には「park」というインスタンス名のムービークリップも作成しました。 あと書かれていらっしゃるスクリプトは 「komoTown.as」というファイル名を付けて 作成している Flash の FLAファイル と同じフォルダにちゃんと保存しましたか? それと 作成している Flash の FLAファイルのステージ上の何も無いところを選択して 「プロパティ」の「パブリッシュ」タブより クラスに 「komoTown」 を書きましたか(↓下図)? また, 作成している Flash の FLAファイルのメインタイムラインは フレーム1 のみで そのフレーム1に「town1」があるのですよね(↓下図)? さらに 「town1」のフレーム1に「park」があるのですよね(↓下図)? 以上のようになっていると動作すると思います。 (逆に言えば どこかが以上のようになってないと動作しない可能性があります。)
補足
丁寧にご説明ありがとうございます!! それと説明不足&間違いすみません!! 「クリック」ではなくて「マウスオーバー」でした。 「街」は真横から見た景色になってまして、左から右へスクロールしていまして、無限にループさせている状態にしています。ですので、「街」の中に入れ子にしたインスタンス「公園」などをマウスオーバーしたときに、ループしている「街」を止めたいんです。最終的にはそれをクリックすると「公園」の説明が出たりさせたいと思っています。 入れ子にさせているせいなのか、子の「公園」をマウスオーバーしたときに親の「街」をうまく制御させることができないんです。 他、ファイル名、パブリッシュなどは問題ないと思います。 すみませんよろしくお願いします!! また説明不足でしたら言ってください!
お礼
お返事ありがとうございます!! お返事来る間色々と試していたのですがやっぱり出来ませんでしたが、BlurFiltan様の言う通りやると出来ました!! ありがとうございます!!! 説明もとても分かりやすかったので大変勉強になりました!! まだまだお聞きしたい事はあるのですが、また調べてどうしても分からない事が出てきましたら、また質問を投稿するかもしれませんが、その時はよろしくお願いします!!! 有り難うございました!!!