- ベストアンサー
swfがきちんと動作しない!原因と解決方法をご教授ください!
- FLASHのサンプル本のパーフェクトジクソーパズルが.swfで正常に動作しない問題が発生しています。.flaファイルから.swfへのパブリッシュでは正常に動作するのですが、別の.flaファイルに入れ子にして再度.swfでパブリッシュすると、ピースが吸着せずに動作しません。A.S.の知識がないため、この問題の原因と解決方法がわかりません。どのようにすれば正しく動作させることができるでしょうか?
- FLASHのサンプル本のパーフェクトジクソーパズルが.swfで正常に動作しません。.flaファイルから.swfへのパブリッシュでは問題なく動作しますが、別の.flaファイルに入れ子にして.swfでパブリッシュすると、ピースが吸着せずに動作しなくなります。初心者のため、A.S.を書くことができず、原因が分かりません。正しく動作させる方法を教えてください。
- FLASHのサンプル本のパーフェクトジクソーパズルが.swfで正常に動作しません。.flaファイルから.swfへのパブリッシュでは問題なく動作しますが、別の.flaファイルに入れ子にして.swfでパブリッシュすると、ピースが吸着しなくなり動作しません。A.S.の知識がないため、原因がわかりません。正しく動作するためにはどのようにすればよいでしょうか?
- みんなの回答 (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; というアクションを追加して、パブリッシュしてみてください。 なお、作品サンプルを改造する場合は、コピーをとって作業し、オリジナルは原形のまま保存しておくようにしましょう。失敗した時や何かあった時に、オリジナルが保存されていれば、すぐに元に戻すことができます。
その他の回答 (1)
- DPE
- ベストアンサー率85% (666/776)
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 を使った表現だと思うのですが。 これ以外の原因だと、ちょっと心当たりがなく、問題のスクリプトを見ないことには分からないのですが、、、 よろしければ、ジグソーパズルの、ピースを吸着する処理と思われるスクリプトを、補足していただけませんでしょうか。大体でも構いません。 スクリプトがあちこちに書かれていると、どれが何の処理か分かりにくいかもしれません。解説書に掲載のサンプルでしたら、どこで何の処理をしているかは書籍の方で詳しく解説されているかと思いますので、その説明を参考に探してみてください。
お礼
パズルの.flaでなく読み込み先の方の.flaに _lockrootのスクリプトを書いたら正常に動作しました。 ありがとうございました。
お礼
ありがとうございます。 でもまだきちんと動作しないです・・・。 パズルの.flaにまだthisや_parent._parentが あるのが原因でしょうか?