質問: シンボルをドラッグアンドドロップした場所により処理を変える アクションスクリプト初心者です。 分からないことは題名の通りなのですが、まずステージの上部1/6にいくつかシンボルが横に並んでいます。例として○、×、□とします。 ステージの下5/6部分は中心から赤・黄・緑の3色に色分けされています。ちょうど円グラフの色分けのような感じです。 ○は赤に入るべき部品なのですが、ステージの赤色部分にちゃんとドラッグされるとそのまま貼りつき、違う色の部分にドラッグされた場合は元々シンボルが並んでいた場所に戻る、ということがしたいのです。 何から調べてよいやら・・・という状態で、お手数をおかけしますがどなたか教えてくださると助かります。 宜しくお願い致します。
回答: 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