• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:シンボルをドラッグアンドドロップした場所により処理を変える)

シンボルをドラッグアンドドロップした場所により処理を変える

このQ&Aのポイント
  • シンボルをドラッグアンドドロップした場所により処理を変える方法について初心者です。
  • ステージの上部にシンボルが横に並び、下部は色分けされていますが、赤色部分にシンボルをドラッグすると貼りつきます。
  • 他の色の部分にドラッグされた場合は元々の位置に戻る仕組みを作りたいです。どのようにすればいいでしょうか?

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

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

Flash の バージョンを書かれていませんが, 以下は,勝手に Flash MX 以上(MX,MX2004 ,8)として回答します。 ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ Flash 5 以降であれば, hitTest (当たり判定) を使うのが一般的だと思います。 まず,○と×と□を,それぞれのムービークリップ(MC)に変換します。 (してあったらそのままでかまいません。) 次に,円グラフのような 赤 青 黄 の塗りの部分も, ムービークリップ(MC)に変換します。 そして,赤 青 黄 ,それぞれの MC にインスタンス名を付けるのですが, 赤の塗りの MC なら, その赤の塗りの MC を選択した状態で, 下のプロパティインスペクタで, 「redMC」 というインスタンス名を付けておきます。 青い塗りの MCなら, 「blueMC」 黄色い塗りの MCなら, 「yellowMC」 とそれぞれ,インスタンス名を付けます。 そして, ○ の MC (インスタンス名特になし)を選択して その ○ の MC に次のスクリプトを書けば, おそらく OK だと思います。 ---コピペ可能----------------------- // この MC が表示されたとき onClipEvent (load) { // この MC の初期座標を記録 var my_x = this._x; var my_y = this._y; } // この MC がマウスプレスされたとき on (press) { // この MC のドラッグをスタート this.startDrag(); } // この MC からマウスアップされたとき on (release) { // この MC のドラッグをストップ this.stopDrag(); // もし, redMC と マウス がヒットして "いな" ければ if (!_root.redMC.hitTest(_root._xmouse, _root._ymouse, true)) { // この MC を元の座標に戻す this._x = my_x; this._y = my_y; } } ----------------------------------- × の MC が, もし青のエリア(blueMC)との当たり判定で 同じような現象を取るようにしたいとすれば, ---コピペ可能----------------------- // この MC が表示されたとき onClipEvent (load) { // この MC の初期座標を記録 var my_x = this._x; var my_y = this._y; } // この MC がマウスプレスされたとき on (press) { // この MC のドラッグをスタート this.startDrag(); } // この MC からマウスアップされたとき on (release) { // この MC のドラッグをストップ this.stopDrag(); // もし, blueMC と マウス がヒットして "いな" ければ if (!_root.blueMC.hitTest(_root._xmouse, _root._ymouse, true)) { // この MC を元の座標に戻す this._x = my_x; this._y = my_y; } } ----------------------------------- と,なります。 □ が 黄 と対応しているならば,同様に, on (release) 内の if 文 がかわるだけで, // もし, yellowMC と マウス がヒットして "いな" ければ if (!_root.yellowMC.hitTest(_root._xmouse, _root._ymouse, true)) { // この MC を元の座標に戻す this._x = my_x; this._y = my_y; } と,なります。 ※ hitTest 自体は Flash 5 以降で使用できますが,   on (release) など on イベントハンドラが,   MC に使えるのが Flash MX 以降なので,   この回答の対象は Flash MX 以上とさせていただきます。 hitTest は色々な当たり判定が取れるのですが, MC どうしの当たり判定は,簡単にするには, 矩形(四角)どうしの当たり判定になってしまいます。 >> 円グラフの色分けのような ですから, 矩形ではまずいので, MCどうしではなく,MCとマウスカーソルとの当たり判定を取ったのが上のスクリプトです。 もっと複雑な当たり判定や動作をさせたい場合は, 次の URL を参考にしてみてください。 「当たり判定について」 ~インスタンス同士で当たり判定を取る~ http://hakuhin.hp.infoseek.co.jp/main/as/hittest.html#HITTEST_01 「クリック&ドロップ」 http://www17.ocn.ne.jp/~wolves/SCHOOL/lecture/lecS1_5.html

terakura
質問者

お礼

ありがとうございます。できました! まだ何から調べてよいか分かれない状態なので、本当に助かりました。ありがとうございました。

関連するQ&A