- ベストアンサー
ドラック&ドロップの吸着について
- Flashで作成したジグソーパズルのピースが、外部書類として読み込んでも吸着がうまく機能しない問題について解決方法を教えてください。
- 問題としているのは、Flashで作成したジグソーパズルのピースが、別のswfファイルで外部書類として読み込まれた場合、吸着がうまく機能しないことです。
- ピースの動作については、半透明のボタンにアクションスクリプトを記述しており、ドラック&ドロップで移動し、吸着する仕組みになっています。しかし、外部書類として読み込まれた場合に正常に動作しないことが問題です。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
まず, ご質問でかかれていらっしゃるスクリプトの一部(_root を使っている部分)に原因があると思います。 hantei = this.hitTest(_root.place13); ↑変数 hantei に _root.place13 との当たり判定値を代入 ですね。「_root.place13 との当たり判定」 です。 _root └ place13 ←当たっているかいないか ここまでは良いのですが, この SWF が他のムービーのムービークリップ(仮称 load_mc)に読み込まれたとします。 _root └ load_mc └ place13 ←これは _root.load_mc.place13 です ターゲットパスが変わります。 ==================== かと言って, hantei = this.hitTest(_root.load_mc.place13); などと書いてしまえば, 逆に今度は,他のムービーに読み込まれなければ単品で動作しなくなってしまします。 ※今時は意地悪く,これが多いです。 わざとこんなようにプログラミングして, ローカルに単品のゲームなどを保存しても 親や子などその他全てのデータが揃わなければ, 正常に動作しないように作ってあったりします。 他のムービーに読み込まれなければ単品で動作しなくなるのは普通は困りますよね。 これには,2通りの対処法があります。 this から見た place13 パス を絶対パスではなく相対パスで書くことです。 hantei = this.hitTest(_prent.place13); とか hantei = this.hitTest(_prent._prent.place13); とかです。 他の _root も同様に書き替えてください。 if (hantei == true){ _x = _root.place13._x →_parent.place13._x _y = _root.place13._y →_parent.place13._y } もう1つは, hantei = this.hitTest(_root.place13); のままで良いですから, パズルムービー(読み込まれる側)の _root の フレーム1 に, this._lockroot = true; と書きます。 これだと,1つ1つの _root を _parent に全て書き替える必要がなくなるので楽です。 _lockrootプロパティ は Flash MX 2004(Flash Player 7)以降で使用できるスクリプトです。
お礼
解答ありがとうございました!! sassakun様のおかげで、無事課題を終えることができました。 とても分かりやすい御解答で、とても助かりました。 本当にありがとうございましたっ!!!!