- ベストアンサー
二つのムービークリップが衝突する方法を知りたい
- あるステージに配置された二つのランダムなムービークリップが衝突する方法を知りたい。それぞれ異なる方向に移動し、お互いが衝突した場合に何かを起こしたい。
- 現在、ムービークリップはただ横方向に移動しており、衝突した場合に特に変化はないが、衝突したかどうかを調べる方法を知りたい。
- 衝突の判定に変数管理や座標の管理を使用する方法も考えられるが、アイテム数が多くなるためできれば簡単な命令で衝突を検出したい。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
衝突判定はMC.hitTest()を使うとできますよ。 例えば・・・ということで以下の状態として考えてみましょう。 ステージ上にmc1というインスタンス名のムービークリップと mc2というムービークリップがあるとします。 mc1がステージの左端から右へ5ずつ、mc2がステージの右端から左へ5ずつ 移動し、いずれ、衝突するとします。 衝突した時、trace()で出力ウインドウに「衝突」と出力し、ムービークリップ自体の 移動を止める。 まず、ムービークリップmc1に下のスクリプトを記述します。 onClipEvent(enterFrame){ if (this.hitTest("_root.mc2")){ trace("衝突"); }else{ this._x+=5; } } onClipEvent(enterFrame){}でフレーム移動のたびにアクションが実行されるようにします。 if文を使って衝突、非衝突を判定しています。 その判定に使用しているのが、 this.hitTest("_root.mc2") です。 自分(this.)とmc2(_root.mc2)が衝突した時、trueを返します。 このif文の場合、衝突判定がtrueだった時、その中を実行し、 falseの時、つまり衝突していない時、else{}の中を実行しています。 else{}の中には、this._x+=5; があるので、衝突するまで右に移動という事になります。 で、次、mc2です。説明するほどでないので説明省略します。 下のスクリプトを記述します。 onClipEvent(enterFrame){ if (this.hitTest("_root.mc1")){ }else{ this._x-=5; } } こんな感じにやれば、衝突判定と衝突時の処理ができます。
お礼
ありがとうございます。 なるほど、マウスクリック以外にも this.hitTestは有効だったのですね。 (思いもしませんでした) 今から仕事に出かけないといけないので 検証できませんが、帰ってきたらさっそくやってみたいと思います。 (早く帰りたくって仕方ありません) 本当にありがとうございました。 助かります。