良いソースの書き方について(複数のインスタンスをまとめてヒットテストする方法)

このQ&Aのポイント
  • 良いソースの書き方について知りたいです。特に、複数のインスタンスをまとめてヒットテストする方法について教えてください。
  • 例えば、_root.char1から_root.char11までのインスタンスとのヒット確認をするアクションスクリプトを短くまとめる方法はありますか?
  • 良いアイデアがあれば、教えていただけると嬉しいです。
回答を見る
  • ベストアンサー

良いソースの書き方について(複数のインスタンスをまとめてヒットテストする方法)

■例文: ---------------------------------------------------------------- onClipEvent (enterFrame) { if ( this.hitTest(_root.char1)) { _parent.nextFrame(); } else if ( this.hitTest(_root.char2)) { _parent.nextFrame(); } else if ( this.hitTest(_root.char3)) { _parent.nextFrame(); } else if ( this.hitTest(_root.char4)) { _parent.nextFrame(); } else if ( this.hitTest(_root.char5)) { _parent.nextFrame(); } else if ( this.hitTest(_root.char6)) { _parent.nextFrame(); } else if ( this.hitTest(_root.char7)) { _parent.nextFrame(); } else if ( this.hitTest(_root.char8)) { _parent.nextFrame(); } else if ( this.hitTest(_root.char9)) { _parent.nextFrame(); } else if ( this.hitTest(_root.char10)) { _parent.nextFrame(); } else if ( this.hitTest(_root.char11)) { _parent.nextFrame(); } } ---------------------------------------------------------------- 上記は、_root.char1 から_root.char11までインタンス名をつけたムービークリップとのヒット確認をするアクションスクリプトです。 こういう動作をしたい場合。 for文を駆使する等で、ソースを短くまとめる方法はありませんでしょうか。 いい案がありましたら、是非ご教授の程宜しくお願い致します。

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

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

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

良いソースの書き方かどうかはわかりませんが onClipEvent (enterFrame) { for (i=1; i<=11; i++) { if (this.hitTest(_root["char"+i])) { _parent.nextFrame(); } } } こんな感じでしょうか。

takaaki1456464
質問者

お礼

なるほど、 [ ] で囲めば、インタンス名も変数で指定できるのですね。 今まで、しりませんでした。 次からにたような事がありましたら、こうやって表記する事も考えていきたいと思います。 大変勉強になりました。 有難うございます!

関連するQ&A

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

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

    • ベストアンサー
    • Flash
  • Flash マウスの位置で速さの変わるスクロールメニュー

    Flashでスクロールメニューを作成したいのですが、うまくいきません。 ボタンを羅列しムービークリップにし、 onClipEvent (load) { Min = -80*15; speed = 20; } onClipEvent (enterFrame) { if (_parent.mask.hitTest(_root._xmouse,_root._ymouse,0)) { this._x -= _parent.mask._xmouse/speed; if (this._x >0) { this._x += Min; } else if (this._x < Min) { this._x -= Min ; } } } 上記のスプリクトを記述することで動かすことには成功しました。 しかし上記スプリクトでは、ドキュメントサイズ内では、メニューにマウスオーバーしないと制止してしまいます。 http://www.sophia-eternal.com/ 上記サイトの様に、読み込んだ時から常にゆっくりスクロールし、 マウスオーバーした時にのみ動きの速さを変えるにはどのようなスプリクトを追加すればよろしいでしょうか? メニューのみのFlashファイルを作成し、HTMLで組み立てれば早いのですが、 デザイン上、ページ全体を1つのFlashファイルで作成するしかありません。 メニューが常にスクロールしていて、マウスオーバーした時にのみ動きの速さが変わる様にしたいのです。 宜しくお願い致します。

  • else if文の順序を変えることに意味がありますか?

    else if文の順序を変えることに意味がありますか? 「スプライトに記述したクリップアクションです。 実行される内容はどうでも良いのですが、 else if文の順序を変えることに意味がありますか?」 ×(2)の部分だけが実行されません。       onClipEvent (enterFrame) {        if (_root.get_tabaco == false ){          this.gotoAndPlay(4); (1)  }else if(_root.get_tabaco ==true){          this.gotoAndPlay(1); (2)  }else if(_root.state_tabaco == 2){          this.gotoAndPlay(5);     } } ○全て実行されます。       onClipEvent (enterFrame) {        if (_root.get_tabaco == false ){          this.gotoAndPlay(4); (2)  }else if(_root.state_tabaco == 2){          this.gotoAndPlay(5); (1)  }else if(_root.get_tabaco ==true){          this.gotoAndPlay(1);     } } 「(1)と(2)の順序を変えただけで正しく実行されるようになりました。 しかし、なぜ?上手くいったのか、どこが間違いなのか分かりません。 else ifに順序なんかあるんでしょうか? こられのスクリプトに違いがありましたら、教えていただけませんか?」

    • ベストアンサー
    • Flash
  • ムービークリップを削除したい

    FLASH 5 を使っています。 現在、duplicateMovieClip を使ってムービークリップを複製できるようにしています。 複製するMCの名前に連番を付けるようにして同じものを何個も複製できるようにしています。 別途、ゴミ箱を作り複製したMCをゴミ箱に乗せると削除できるようにしたいと考えています。 hitTest と removeMovieClip を使えば良さそうなのですがうまくいきません。 複製したMCが何個も出来るためゴミ箱基準だとMCの名前を指定できないので複製元のMCに onClipEvent (enterFrame) { if (this.hitTest( _root.gomi )) { this.removeMovieClip (); } } と書いてみたのですがダメでした。 なにぶん Actionscriptを始めたばかりで、良く分かりません。 お分かりの方、教えていただけますでしょうか? 宜しくお願い致します。

    • ベストアンサー
    • Flash
  • 格納式の動くメニューとヒット領域判定について

    ロゴをさわると格納されていたメニューがモーションを伴いながらでて、そのまま消えずに維持、一定以上左のエリアにいってしまうとメニューが消えるメニューを作りたいと思っています。 http://fashion.dior.com/dior.html イメージとしてはこちらのどれかリンクを選んでいただいて各コンテンツを表示させるメニューをクリックした時の動きが近いです。 格納→維持→エリア外にいくと消えるしくみまではなんとか作れたのですが、不思議なことにメニューが現れるときにモーションをともなわず、最後のフレームだけが再生されるようになってしまいました。 なお、ロゴには下記のスクリプトをつけました。 ヒットテストにしていないのはその後も条件をつけるためにはヒットテストだとできない?かなと思ったからです。 onClipEvent (mouseMove) { if (this._parent._xmouse>749.6 && this._parent._xmouse<966.6 && this._parent._ymouse<228.6 && this._parent._ymouse>28.6) { this._parent.menu.gotoAndPlay(2); } else if (this._parent._xmouse<698.9) { this._parent.menu.gotoAndStop(1); } else { this._parent.menu.gotoAndStop(7); } } 表示させるメニューのムービークリップ(menu)には onClipEvent (mouseMove) { if (this._parent._xmouse>698.9) { this.gotoAndStop(7); } else if (this._parent._xmouse<698.9) { this.gotoAndStop(1); } } と書きました。 かなり無理矢理なスクリプトだと思いますがご教授お願いします。! ちなみに制作環境はflashMX2004です。

  • onClipEvent の enterFrameとloadについて

    お世話になります。 幅500pxのステージに形だけのムービークリップを作り、 それに onClipEvent (enterFrame) { if (this._x<=100) { this._x = 250; } else { this._x = 300; } } と記述しました。 ステージ上でムービークリップのx位置を100px以下に配置したところ、300pxに移動してしまいます。 onClipEvent (load)に変更すると250pxになります。 なぜですか? よろしくお願いします。

    • ベストアンサー
    • Flash
  • 揺れるスクリプトについて

    こちらで教えていただいたサイトで揺れるスクリプト を勉強していたのですが、 ■をMCにして、  onClipEvent (load) {    this._xscale = this._yscale = 0;    function sMove(mScale,acc,conv) {      theScale = theScale*acc+(mScale-this._yscale)*conv;      this._xscale = this._yscale += theScale;    }  }  onClipEvent (enterFrame) {    if (this.hitTest(_root._xmouse,_root._ymouse,1)) {      sMove(130,0.8,0.2);    } else {      sMove(100,0.8,0.2);    }  } と書いたのですがプレビューすると真っ白なままなにも 表示されません。 なぜなのでしょうか?

    • ベストアンサー
    • Flash
  • ActonScriptでムービークリップの移動

    お世話になります。ActonScriptでムービークリップの移動を考えているのですが記述が悪いためかうまくいきません。 ムービークリップのx座標が300を超えたら this._x -=10 ムービークリップのx座標が0未満になったら this._x +=10 という処理をしたいと思い onClipEvent (enterFrame) { if (_x>300){ var a = 1; } else if (_x<0){ var a = 2; } if (a=1){ this._x -=10; } else if(a=2){ this._x +=10; } } のように記述したのですが、this._x -=10しか認識してくれなくて、一方向にしか進みません。 どうかよろしくお願いいたします。

    • ベストアンサー
    • Flash
  • getTaimerがうまく動作してくれません

    いつも、ありがとうございます。FlashMXです。 衝突の後の少しの時間ボタンの使用を無効にしたいので以下のようなスクリプトをムービークリップに入れましたが、無効になった後に戻りません。 getTimerが効いていないのでしょうか?困っています。 onClipEvent (enterFrame) { if (_parent._parent.shin.hitTest(this)) { _parent._parent.shin.gotoAndStop("hit"); start = getTimer(); timer = 0.05*1000; if (getTimer()>start+timer) { _parent._parent.btn_l._visible = true; _parent._parent.btn_u._visible = true; _parent._parent.btn_r._visible = true; } else { _parent._parent.btn_l._visible = false; _parent._parent.btn_u._visible = false; _parent._parent.btn_r._visible = false; } } }

    • ベストアンサー
    • Flash
  • flash as2.0 hitTest()について

    FLASHMXで作業をしています。 mcが壁に当たると反対方向にmcを移動させたいのですが 以下では、うまくいきません。理由がわかりませんし打開策も わかりません。解決策を教えてください。よろしくお願いいたします。 onClipEvent(load){ this._x=100; this._y=380; } onClipEvent(enterFrame){ this._y -=3; if(_root.tama_mc.hitTest(_root.kabe_mc)==true){ this._y +=5; } }

専門家に質問してみよう