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

FLASHのサンプル本(http://books.yahoo.co.jp/bin/detail?id=31171915)のパーフェクトジクソーパズルがあるんですが
この中の.flaファイルから.swfへパブリッシュした時はきちんと動くんですが、
書き出した.swfを新規の.flaファイルにMCに入れ子にして
loadmovie("pazzlu.swf")としてまた.swfでパブリッシュすると今度はピースが吸着しなくなってしまいきちんと動作してくれません。
初心者なのでA.S.が全く書けないので原因が全くわかりません。
きちんと動作させる方法ってどうするんでしょうか?
環境はMX2004PROでOSはmac10.3.5です。
ご教授よろしくお願いします。

A 回答 (2件)

ジグソーパズルの fla ファイルがお手元にあるようですので、これを開き、スクリプトが設定されていると思われる箇所を、よく見てみてください。


スクリプトを設定できる場所は、

 ・タイムラインのフレーム
 ・ムービークリップのインスタンス
 ・ボタンのインスタンス

この3箇所です。
スクリプトが設定されているフレームには、「 a 」のマークが付きます。スクリプトを探す時の目安にしてください。

スクリプトの中に、1箇所でも、

 _root.*** = ・・・;

というように、_root を指定している箇所がありませんでしょうか?
_root は通常は、ムービーそのものを指します。
しかし、他の swf ファイルにあるムービークリップの loadMovie により読み込まれた場合は、_root の指す対象が、読み込みを実行した側の swf ファイルに変わってしまいます。
例えば、puzzle.swf 内のスクリプトで _root を使った場合、この swf ファイルを単体で動かすと、_root は puzzle.swf を指し、スクリプトは正常に動きます。
これを、menu.swf ファイルにある game_clip というムービークリップの中に、loadMovie で読み込むとします。
すると、puzzle.swf で使われている _root はmenu.swf を指すようになります。そのため、単体で動かした時は正常に動いていたものが、menu.swf に読み込んだ途端に動かなくなるという現象が発生します。


Flash Player 7 、つまり Flash MX 2004 以降からは、このように _root の指す対象が変わることで起きるトラブルを解決するために、_root の指す対象を固定する” _lockroot ”というプロパティが使えるようになりました。true にすると、_root は引き続き、元のムービー自身を指すようになります。
様々な書き方がありますが、一番簡単なのは、puzzle.swf で _lockroot を true にすることです。
ジグソーパズルの fla ファイルを開き、メインのタイムラインのフレーム1に、

 this._lockroot = true;

というアクションを追加して、パブリッシュしてみてください。

なお、作品サンプルを改造する場合は、コピーをとって作業し、オリジナルは原形のまま保存しておくようにしましょう。失敗した時や何かあった時に、オリジナルが保存されていれば、すぐに元に戻すことができます。
    • good
    • 0
この回答へのお礼

ありがとうございます。
でもまだきちんと動作しないです・・・。
パズルの.flaにまだthisや_parent._parentが
あるのが原因でしょうか?

お礼日時:2005/01/15 13:34

this や _parent は、自分自身や親(1つ上)の階層を指す、相対的な表現です。


ジグソーパズルの swf を単体で動かした時に正常に動いているようであれば、this や _parent._parent が原因ではないと思います。

あまり使われない表現なので、可能性は低いと思いますけど・・・
もしかして、_root の代わりに _level0 という記述がありませんでしょうか?
_level0 は通常は _root と同様に使えますが、今回のように loadMovie で他のムービーに読み込まれた場合は、_level0 は loadMovie を実行したムービーを指すようになります。
_level0 が使われているとすると、_lockroot を true にしても、_level0 を指す対象をジグソーパズルの swf 自身に固定しておくことができません。_level0 の部分を全て _root に置き換えれば、_lockroot で制御できるようになります。


単体では正常なのに、loadMovie で読み込むと動かなくなるのは、ピースの吸着を判定する部分で、読み込まれた時に参照するターゲットが変化して、目的のターゲットを正しく指定できなくなっていることが原因ではないかと思います。
読み込みによりターゲットパスが変化するのは、_root か _level0 を使った表現だと思うのですが。

これ以外の原因だと、ちょっと心当たりがなく、問題のスクリプトを見ないことには分からないのですが、、、
よろしければ、ジグソーパズルの、ピースを吸着する処理と思われるスクリプトを、補足していただけませんでしょうか。大体でも構いません。
スクリプトがあちこちに書かれていると、どれが何の処理か分かりにくいかもしれません。解説書に掲載のサンプルでしたら、どこで何の処理をしているかは書籍の方で詳しく解説されているかと思いますので、その説明を参考に探してみてください。
    • good
    • 0
この回答へのお礼

パズルの.flaでなく読み込み先の方の.flaに
_lockrootのスクリプトを書いたら正常に動作しました。
ありがとうございました。

お礼日時:2005/01/17 14:21

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