プロが教える店舗&オフィスのセキュリティ対策術

色々調べてみたんですが、どうしても上手くいきませんでした。
前に似たような質問があったら申し訳ありません。
下手な質問ですが答えてくださると嬉しいです。

Flashでジグソーパズルを作りました。
ピースが正解の場所に近づくと吸着するような感じにしました。
そのまま書き出して、swfで読み込むと普通に作動します。
ですが、そのswfを別のswfで外部書類として読み込むと、吸着だけ上手く作動しません。
どうすれば、外部書類として読み込んだ先でも作動するのでしょうか。

因みに現在半透明のボタンに以下のアクションスプリクトを記入しています。

on(press){
this.startDrag();
_alpha = 30;
}
on(release, releaseOutside){
this.stopDrag();
_alpha = 100;
hantei = this.hitTest(_root.place13);
if (hantei == true){
_x = _root.place13._x
_y = _root.place13._y
}
}

よろしくお願いします。

A 回答 (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)以降で使用できるスクリプトです。
    • good
    • 0
この回答へのお礼

解答ありがとうございました!!
sassakun様のおかげで、無事課題を終えることができました。
とても分かりやすい御解答で、とても助かりました。
本当にありがとうございましたっ!!!!

お礼日時:2007/07/21 13:57

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!