• ベストアンサー

大量のシンボルに同じイベントを記述したい

以前も質問したのですが、再び失礼します。 都道府県を当てるクイズを作ろうと思います。 本題はここからなのですが、 都道府県のインスタンス1~47をいっせいにオンマウスで反応させたいのですが、製作による事情からASでボタンの代用をすることになりました。 内容自体は簡単で、「マウスが乗るとフレーム2へ移動、マウスが離れるとフレーム1へ移動。」と言うものです。 が、この内容を47箇所全てのインスタンスに一つずつ書くのは正直、骨が折れます。 なんとか、楽に出来ないものでしょうか・・・。 たびたびすみませんが、よろしくお願いします。

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

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

  • ベストアンサー
  • BlurFiltan
  • ベストアンサー率91% (1611/1754)
回答No.2

> 「マウスが乗るとフレーム2へ移動、 > マウスが離れるとフレーム1へ移動。」 どの階層のタイムラインのフレームを移動させるのですか? _root だとこんな感じで行けると思います↓。 for (i=1; i<=47; i++) { // ロールオーバーしたとき _root[i].onRollOver = function() { _root.gotoAndStop(2); }; // ロールアウトしたとき _root[i].onRollOut = function() { _root.gotoAndStop(1); }; // ドラッグアウトしたとき _root[i].onDragOut = _root[i].onRollOut; } _root ではなく,都道府県ムービークリップ内のタイムラインだと, _root.gotoAndStop(2); → this.gotoAndStop(2); _root.gotoAndStop(1); → this.gotoAndStop(1); のように変更すれば出来ると思います。 ただし, 半角数字 1~47 というインスタンス名をムービークリップに付けている場合です。

noname#77303
質問者

お礼

回答ありがとうございます。 移動させる階層は「変数i」になるようです。 つまり、「マウスが乗ったそのシンボルをフレーム2に移動させる」という物です。 大変参考になりました。ありがとうございます。

その他の回答 (3)

回答No.4

>そのインスタンス名が1~47で、 >「沖縄県にマウスが乗ると沖縄県の部分が赤くなる >(2フレームに飛ぶ)」 じゃあインスタンス名を間違ってた以外は 最初のでよかったんですね onClipEvent(enterFrame){ for(i=0;i<=47;i++){ name=i; if(_parent[name].hitTest(_root._xmouse,_root._ymouse,1)){ _parent[name].gotoAndStop(2); }else{ _parent[name].gotoAndStop(1); } } } ついでに相対パスに書き直しておきました どっかテキトーな都道府県のMCに このAS書いたらいけるはず ところでインスタンス名の最初が 数字って大丈夫でした…?

noname#77303
質問者

お礼

無事に動作しました!大変参考になりました^^ for文を使った事でいちいち書き込まずに済み、大変助かりました!

回答No.3

すいません読み違えてました 一斉に47個のMC全てを ロールオーバーで2フレーム目に 移動させたいわけですね そうすると個別にロールオーバー判定とる必要がないわけですから 47個のMCをまとめたMCをつくっておいて そいつにロールオーバーのASを書いておくと効率いいかと思います またインスタンス名は『tdfk1』とか 番号付けされてると仮定して onClipEvent(load){ for(i=0;i<=47;i++){ name="tdfk"+i; this[name].gotoAndStop(1); } on(rollOver){ for(i=0;i<=47;i++){ name="tdfk"+i; this[name].gotoAndStop(2); } on(rollOut){ for(i=0;i<=47;i++){ name="tdfk"+i; this[name].gotoAndStop(1); } みたいなカンジでいけるかと思います

回答No.1

もし47個のMCのインスタンスが 番号付けされてるならどこかテキトーなMCに 総当たりの当たり判定させるといけると思います たとえばインスタンス名が『tdfk1』とかいう名前で _rootの直下に置かれてるとするならば onClipEvent(enterFrame){ for(i=0;i<=47;i++){ name="tdfk"+i; if(_root[name].hitTest(_root._xmouse,_root._ymouse,1)){ _root[name].gotoAndStop(2); }else{ _root[name].gotoAndStop(1); } } } 多分これでいけると思います (動作確認しました、いけました) もしそれぞれの都道府県の名前でインスタンス名付けてるなら 配列使えばいけると思いますが、正直全てのインスタンス名を 47個間違いなく配列に入れる手間を考えると インスタンス一つ一つにAS書いた方が楽な気がします

noname#77303
質問者

補足

説明が至らず申し訳ありません。 北海道から沖縄県までをインスタンスに分割してあります。 そのインスタンス名が1~47で、「沖縄県にマウスが乗ると沖縄県の部分が赤くなる(2フレームに飛ぶ)」 と言う風にしたいのですが、少々語弊があったようで申し訳ありません。 for文で少し試して見ます。

関連するQ&A

  • 複数のmcに同じイベントを記述したら、1つしか反応しない

    うまくいかない原因がわからず困っています。 画面上の複数のmcに同じイベントを記述しました。 内容はシンプルで、「mc01にマウスがのったらフレームf01に移動する、 マウスが離れたらフレームstartに戻る」というものです。 mc02はf02へ、mc03はf03へ移動というふうにします。 これをmc01からmc07まで順番に書いていったところ mc07は反応するのですが、あとの6つが反応しません。 mc07の記述を消すとmc06が反応するようになり、 どうやら一番最後に記述している部分しか反応しないようです。 これ↓がそれぞれのmcに書いてるASです。 ---------------------------------------------------------- onClipEvent (enterFrame) { if (_root.mc01.hitTest(_root._xmouse,_root._ymouse,1)) { _root.gotoAndPlay("f01"); } else { _root.gotoAndPlay("start"); } } ---------------------------------------------------------- ちなみにFlash8使用、プレイヤー8でパブリッシュしてます。 どうぞよろしくお願いします。

    • ベストアンサー
    • Flash
  • Actionscript3.0でのフレーム操作

    今までAS2で、ボタンを押したら、"top"というラベルを付けたフレームに移動する操作を、ボタンインスタンスに直接アクションを設定して、 on (release) {gotoAndPlay("top"); } とし、topというフレームで stop(); みたいな感じにしてたんですが、これをAS3でやろうとしたらどうしたらいいのでしょうか?

    • ベストアンサー
    • Flash
  • AS3リンケージ設定したムービークリップの中で、フレーム移動がしたいです。

    初心者です。 AS3で、 リンケージ設定したムービークリップを addChildで呼び出し、 呼び出したムービークリップの中の、 指定したフレームに移動するにはどうしたら宜しいでしょうか。 ステージに配置した場合、インスタンス名を付けて インスタンス名.gotoAndPlay("フレームラベル"); で移動しますが、 リンケージ設定したムービークリップの場合はインスタンス名の代わりに リンケージ名で呼び出せないのですか。

    • ベストアンサー
    • Flash
  • FLASHでのアニメーションボタン作成について

    こんばんは。 まだFLASH CS4を触り始めの初心者です。 現在FLASHでサイト製作をしており、ボタンを作成していますが、 マウスダウン時のアニメーションでつまずいています。 マウスアップ時のアニメーションのMC(btn_up)、 マウスオーバー時のアニメーションのMC(btn_over)をそれぞれ作成し、 ボタンインスタンスの「アップ」「オーバー」にそれぞれ割り当てています。 アップ時にはbtn_upのインスタンスが動き、 マウスオーバー時にはbtn_overが動きますが、 マウスダウン時にはボタンが一瞬真っ白になり、 マウスクリックを離すと再びbtn_overが動作します。 ダウン時の指定をしていないので、上記の動きは理解できるのですが、 他のFLASHサイトのアニメーションボタンを触ってみても、 マウスダウン時に画面が白くなることはありません。 再現したい内容として、マウスオーバー時にループして動いている アニメーションをクリックしても、マウスオーバー時のアニメーションが 止まらずに動き続けるというアニメーションにしたいので、 ボタンインスタンスのダウンにマウスオーバー時のインスタンスを 割り当ててみましたが、そうするとマウスダウンした際に アニメーションが最初から再生されてしまいます。 また、ボタンインスタンスでは、「マウスオーバー時にタイムラインの 何番フレームに移動する」という制御ができないようなので、 ActionScriptを使ってボタンと同様の制御をしようと思い、 addEventListenerでそれぞれオーバー、ダウン時の設定をしましたが、 マウスオーバー時にマウスのカーソルがリンクとして認識しません (矢印のカーソルから指のカーソルにならない)。 ターゲットをリンクとして認識させる為のASの記述はあるのでしょうか? 長文となってしまい恐縮です。 宜しくお願い致します。

    • ベストアンサー
    • Flash
  • アクションスクリプト

    > /* クリックして特定のフレームに移動し、再生 特定のシンボルインスタンス上でクリックすると、再生ヘッドがタイムラインの指定フレームに移動し、そのフレームから再生が継続されます。 メインタイムラインまたはムービークリップタイムライン上で使用できます。 手順 : 1. 以下のコード内の数値 5 を、シンボルインスタンスのクリック時に再生ヘッドが移動するフレームの番号に置き換えます。 */ button_1.addEventListener(MouseEvent.CLICK, fl_ClickToGoToAndPlayFromFrame); function fl_ClickToGoToAndPlayFromFrame(event:MouseEvent):void { gotoAndPlay(2); } AS3CS5で上記のコードでボタンを押すたびに動くアニメーションを作成しています。上記ではフレーム2に移動になっていますが、例えば2、22、44に移動して欲しい場合どのように記述すれば良いですか??gotoAndPlay(2 22 44)等で試していますが上手くいきません

    • ベストアンサー
    • Flash
  • as3.0でのフレーム移動制御のスクリプト

    当方、FLASH cs4、as3.0で製作をしております、まだ初心者です。 以下のタイムラインを動作させようとしているのですが、どうにも行き詰まってしまいこちらに参りました。 どなたかご教授頂けないかと願っております。 どうぞ宜しくお願い致します。 flaステージ上に(A_btn)、(B_btn)、(C_btn)、(D_btn)、(C_btn)という5個のボタンインスタンスを配置しています。 オープニングと同時にA_mcの前半を再生してA_stopラベルのフレームで停止します。 (9フレーム目のasには stop(); 記述済み) その状態で(C_btn)や(D_btn)をクリックした時に、A_stopラベルのフレームからA_closeラベルのフレームに移動して A_mcの後半を再生して、A_mcが終了する(17フレーム目)と同時にB_mcを飛び越えてC_startやD_startラベルのフレームに移動しムービーを再生するには、どのフレームにどんなラベルを追加したり、スクリプトを記述すれば良いか具体的にお教え願えませんでしょうか。 同様にB_mcからC、Dを飛び越えてE_mcに移動したり、E_mcからAやBにも移動させたいです。 また、上記はタイムラインアニメですが各々のmcをswfとしてロードする場合も合わせてご教授頂けると幸いです。

  • キーボードを押した時のムービークリップの動きについて

    キーボードを押した時のムービークリップの動きについて 横スクロールの簡単なFlashゲームを作ろうとしています。 制作環境はWinXP,flashCS4,as3です。 今やりたい事は、キーボードの十字キーを押すことでキャラクターを移動させる、と同時に キャラクターのムービークリップ内に作ってある任意のフレームに飛ばして 歩いているアニメーションを再生させるということです。 「KeyboardEvent」クラスを使って、function に「インスタンス名.x +=3;」という 記述をすることでインスタンスの移動はできました。 ですが、キーボードを押し続けると、アニメーションの作ってあるフレームが 最初のフレームから動かないため、動きがつきません。 キャラクターを移動させると同時に、キャラクターのアニメーションを再生させて動きを つけるにはどういう記述の仕方をしたら良いでしょうか? アドバイスをいただけましたら幸いです。 下記URLが、現在つくっていてうまくいかないものの例です。 http://homepage2.nifty.com/meary/test.html 下記が記述スクリプトです -------------------------------------------------------- //キーダウンしたとき stage.addEventListener(KeyboardEvent.KEY_DOWN, handleKeyDown); //右矢印キーを押すと右に移動、hitoインスタンスはwalkフレームへ function handleKeyDown(e:KeyboardEvent) { if(e.keyCode == Keyboard.RIGHT) { hito.x += 3; hito.gotoAndPlay("walk"); } }

    • ベストアンサー
    • Flash
  • 文字の入力が突然出来なくなりました。ショートカットキーについて

    1.初期的な質問で申し訳ありません。先ほど突然、書き込みをしようとしたら文章入力しようとしても、全く文字が打てないのです。どこが何か誤ってロックでもかかってしまったのでしょうか?半角全角キーを押すと、アルファベットの半角だけ打てました。パソコンを再起動させたら今できるようになりました。(で、今質問、入力しているのです。)今後またこのような現象が起きた場合どうすればいいでしょうか?Num Lock キーを押すと「ぴ」となります。関係ありますか? 2.実は本題は別でして、tabキーをマウスのポインターとして使っていますが、(説明が分かりにくいとは思いますが...)ひとつのページ?にいくつかのフレームがある場合なんですが、ひとつのフレーム内だけ、tabキーが有効で、次のフレーム?に行くには、そのフレームにマウスでクリックして、次の領域?フレームに移る。その次の領域?フレーム?に移動するにはマウスを使わずに次のフレームにジャンプ?する方法はありますか? (パソコン初心者で、用語をあまり知りません)よろしくお願いします

  • フレームの画面の動き

    質問があります。よろしくお願い致します。 HTMLでIFRAMEを使用しております。 IFRAMEでフレーム内に表示される画面が、マウスの左をクリックしたまま 左右に振ると内容がフレーム内で左右に移動してしまいます。 ―HTML内容一部 <iframe src="top.html" name="main" frameborder="0" scrolling="auto"> <…> フレーム内に表示された内容が、マウス操作に影響しないようにしたい のですが、何か設定や指定に方法はないでしょうか? お手数ですが、教えていただけるととても助かります。 どうぞよろしくお願い致します。

    • ベストアンサー
    • HTML
  • フレームを使わないでフレームっぽくみせるには?

    ホームページを製作しようと思っています。 そこで3カラム型の感じのデザインにしたいと思っているのですが、 ページ数を結構つくらなければいけないので、左側にメニュー、右側に広告を張って、真ん中はメインの内容にしようとすると、やはりフレームを使うのが便利なのです。 広告の関係上、広告をインラインフレーム内などに入れることができないので非常に悩んでいます。 フレームを使わないで3カラム型のようなホームページを作るとなると、すべてのページを1個ずつひらいて更新するしかないでしょうか。 メニューをふやしたり、サーバー移動となると気が遠くなりそうで・・・ よろしくお願いいたします!