• ベストアンサー

ロールオーバーができません

いつも質問ばかりですみません>< FLASH8PROを使ってます。 http://question.excite.co.jp/qa1487342.html 上の質問のようにしたくてやってみたのですが、#2をやるとすべてのボタンが1回はちゃんと動作するのですが、2回目以降はマウスを乗っけても何の反応もありません。 スクリプトは、上の質問に書いてあるものそのままです。 わかりにくいかも知れませんが、よろしくお願いしますm(__)m

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

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

#1です。 実際に作ってみましたがうまく動きますよ。 >> shindo = 0; をどこに入れたらいいかよくわからず、 >> mainMCの入っているフレームにアクションとして >> 入れたのですが、あっていたのでしょうか? >> レイヤー2|●|メニューボタン >> レイヤー1|●|mainMCのある方←こちらのフレームに入れたということです。 今回の件とは関係のないことですが, レイヤーはスクリプト上関係ありません。 フレーム1 ならどのレイヤーに書いてもフレーム1で動作するスクリプトになります。 ですから,上のようにされてもかまいませんが,お薦めできません。  □レイヤー3 ・・・|○| ←スクリプト  □レイヤー2 ・・・|●| ←メニューボタン用レイヤー  □レイヤー1 ・・・|●| ←切り替わるオブジェクト用レイヤー これが良いです。 サンプルなど色々と見るとわかると思いますが, スクリプトは普通,スクリプト用に普通のレイヤーを作成して, その空白キーフレーム(白い○)のフレームに書くものです。 そうしないと,思いがけないミスなどが発生することがありますし, 同じフレームであれば,違うレイヤーに色々スクリプトを書くと, 理解しにくく,また誤作動の原因にもなります。 同じフレームではどのレイヤーに書いても同じというのは, 同じ階層であればの話ですよ。 ムービークリップ内のスクリプトはムービークリップ内独自のタイムラインを持ちますから, 同じフレームに存在する,複数のムービークリップのフレーム1に, 各スクリプトをそれぞれ書くことは当然あります。 同じムービークリップ内(_rootも同じく)の違うレイヤーには普通(絶対に)スクリプトを分けません。 つまりこんなことは決してしてはいけません↓。  □レイヤー4 ・・・|○| ←スクリプト  □レイヤー3 ・・・|●| ←ボタン  □レイヤー2 ・・・|○| ←スクリプト  □レイヤー1 ・・・|●| ←スクリプト + ムービークリップ こんなになるのであれば, レイヤー1とレイヤー2のスクリプトを全てレイヤー4にまとめます。      ↓ ↓ ↓  □レイヤー4 ・・・|○| ←スクリプト  □レイヤー3 ・・・|●| ←ボタン  □レイヤー1 ・・・|●| ←ムービークリップ 今回の場合, 上記の件は関係ありません。 フレーム1のスクリプトと言えば,フレーム1のスクリプトです。 どのレイヤーかは問題ではありません。 ------------------------------------------- ロールオーバーで動作させる「ボタン」は, 「ボタンシンボルのインスタンス」になっていますか? ムービークリップに書けば階層が変わりますから当然スクリプトは変わりますよ。 「ボタンシンボルのインスタンス」は階層を持たないので, メインアニメーション(_root)の1フレームのフレームスクリプトとして, shindo = 0; と書けば,その shindo という変数は,ボタンからパス無しで参照できます。 他は変になる原因が思いつきません。 逆に1回ずつしか動作させない方法…???? どうやったらできるのでしょう??? 難しい。 そっちの方を考える方が難しいです。 ボタンがボタンインスタンスでなく, ムービークリップであったとしたら… もしそうであったとしたら… movie という変数が,別々のムービークリップに格納されるので, 1回ずつしか動きません! ↑おそらくこれが原因でしょう。 ボタンがボタンインスタンスではなくムービークリップになっている。 これだと思います。 スクリプトをコピペすることは別に良いのですが, 他に書いていることがちゃんと作成されているという前提でないと,うまく動きませんよ。 ボタンと言えば普通はムービークリップではなくボタンインスタンスのことです。 ボタンにボタンインスタンスではなく ムービークリップを使用したいのでしたら, movie や shind という変数は, _root や,グローバル変数として考えないとうまく行きません。 mainMC.subMC1を動かすボタン(ムービークリップ)は ------------------------------------------- on (rollOver) { if (_root.movie != "1") { _root.shindo += 1; _root.mainMC.subMC1.swapDepths(_root.shindo); _root.mainMC.subMC1.gotoAndPlay(2); } _root.movie = "1"; } ------------------------------------------- mainMC.subMC2を動かすボタン(ムービークリップ)は ------------------------------------------- on (rollOver) { if (_root.movie != "2") { _root.shindo += 1; _root.mainMC.subMC2.swapDepths(_root.shindo); _root.mainMC.subMC2.gotoAndPlay(2); } _root.movie = "2"; } ------------------------------------------- このように変更してください。 ボタンでなくムービークリップは階層を持ちます。 階層に注意してください。 「ターゲットパス」 http://homepage3.nifty.com/ginga-b/MX/targetpath.html

shota1125
質問者

お礼

たびたび回答ありがとうございます。 質問したこと以外にも、自分のミスを詳しく丁寧に書いていただき、本当に感謝の気持ちでいっぱいです。 おっしゃるとおり、ボタンをムービークリップで作っていました。 教えていただいたHPも参考にして、1から勉強しなおそうと思います。

その他の回答 (1)

noname#35109
noname#35109
回答No.1

よくわかりませんが, #1に書いた, >> メインアニメーションの1フレームの >> フレームスクリプトとして,例えば, >> >> shindo = 0; >> >> という変数とその変数に0を入れておいて, はちゃんと書きましたか? なにしろ,話が古いですし, ムービーの構造を説明には,自分でも何を回答しているのかよくわかりません(イメージできません)。 階層構造は大丈夫ですか? その質問への回答でも驚いていますが, よく#1の説明で理解されていますね。 いやはや,驚きと感動…。 Flash というものでは,ムービーの階層や位置を説明するのが文字だけでは大変なのですよ。 そして理解するのも大変だと思います。 スクリプトを書くのは簡単ですが。 shindo = 0; 初期値が大切です。 あとムービークリップの階層とネーミングにも気を付けてください。

shota1125
質問者

お礼

↑お礼の場所、間違えました>< ごめんなさいm(__)m

shota1125
質問者

補足

回答してくださいましてありがとうございます。 一応#1のようにやった場合は、クリックごとに階層が変わっていくようになりました。 ただ、shindo = 0; をどこに入れたらいいかよくわからず、 mainMCの入っているフレームにアクションとして入れたのですが、あっていたのでしょうか? レイヤー2|●|メニューボタン レイヤー1|●|mainMCのある方←こちらのフレームに入れたということです。 いろいろやりましたが#1はできるのに、#2になると各ボタンが一回ずつは動くのですが、その後は何もできなくなってしまうという状況は 変わりませんでした。 また、質問ですが、よろしくお願いいたします。

関連するQ&A