• ベストアンサー

this._x と this._yをドラッグした後の値に変更したい

バージョンはFLASH8です。 attachMovieメソッドでインスタンスを作成しました。 インスタンスは複数あり、作成した後にドラッグして場所を入れ替えます。 それぞれのインスタンスを衝突判定します。赤い箱のムービークリップに衝突したら、インスタンスは箱に入り、青い箱に衝突したら元の場所に戻るようにしたいのです。 どうしても、その「元の場所」が移動した後の座標ではなく、最初にインスタンスを作成した座標になってしまうので、困っています。 どうぞ宜しくお願い致します。

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

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

> その「元の場所」が移動した後の座標ではなく、 難しい書き方で, 結局,「元の場所」とはどこなのかよくわかりませんね。 青い箱の場所にドラッグして 移動した後の場所 は青い箱の場所なわけですから, 青い箱にヒット状態の場所ということになります。 これは変ですね。 勝手な推測ですが, 「元の座標」とは, 移動した後の座標 ではなく, 「ドラッグを開始」した場所なのではないでしょうか。 ここで言う「ドラッグを開始した場所」というのは, 最初の最初にドラッグを開始した場所(最初にインスタンスを作成した座標)ではなく, 青い箱に衝突するすぐ前にドラッグを開始した場所です。 失敗作の「最初にインスタンスを作成した座標」に戻るスクリプトを書いてくださった方が, 変形しやすく答えやすかったと思いますが, 勝手に作った状況では次のようにスクリプトを書けば, 青い箱に衝突したらその前にドラッグを開始した場所に戻る物はできます。 次のスクリプトは, _root(メインムービーのステージ上)に「blueMC」というインスタンス名のムービークリップがあったとして, ドラッグするムービークリップのフレーム1に書くスクリプトの例です。 --------------------------------------- // ---マウスプレス時の処理 --- this.onPress = function() { // ドラッグ開始 this.startDrag(); // ドラッグ開始時の座標を記録 my_x = this._x; my_y = this._y; }; // --- マウスアップ時の処理 --- this.onRelease = function() { // ドラッグ終了 this.stopDrag(); // もし blueMC にヒットしていたら if (this.hitTest(_root.blueMC)) { // ドラッグ開始時の座標に戻す this._x = my_x; this._y = my_y; } }; ------------------------------------- 勝手に解釈している部分があり, 勝手な状況を想定した回答です。 誤解している可能性も大きいです。 とんちんかんな回答をしていましたらすみません。

terakura
質問者

お礼

できました<(_ _)> 説明が足りなかったにも関わらず、こんなに親切にお答えいただきありがとうございました。 // ドラッグ開始時の座標を記録 my_x = this._x; my_y = this._y; の左辺と右辺を反対に書いていたため、できなかったようです(;_;) 回答を読ませていただいた瞬間にハッと気づきました・・・。 本当にありがとうございました。