- ベストアンサー
シーン移動後に移動前のmcが残って表示される
- シーン移動後に移動前のmcが残って表示される現象が発生しています。具体的には、シーン1からシーン2へ移動すると四角緑のmcが残り、さらにシーン2からシーン1へ移動すると四角緑だけが表示されてしまいます。この問題の解決方法を教えてください。
- シーン1とシーン2での移動時に、移動前のmcが残って表示される問題が発生しています。特にシーン2からシーン1への移動時には、四角緑のmcが残り続けてしまいます。この問題を解決する方法を教えてください。
- シーン1からシーン2への移動時に、移動前のmcが残って表示される問題が起こっています。また、シーン2からシーン1への移動時には、四角緑のmcだけが表示され続けてしまいます。この問題について、解決策を教えてください。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
前回ご質問のときに書いたURL http://hakuhin.hp.infoseek.co.jp/main/as/z.html#Z_01 と, 前回も書いた MovieClip..removeMovieClip(); で解決すると思いますよ。 ムービークリップの深度を変更すると, ムービークリップはレイヤーというものに依存しなくなるので, シーンをまたいでも存在してしまいます。 だから,四角緑が重複するという一見怪現象が起こるのだと思います。 簡単なことから積み上げないと全然先に進めなくなりますから実験です。 新規ドキュメント作成して, そのドキュメントを任意の名前で任意の場所に保存してください。 そして,まずタイムラインを 2レイヤー 60フレームにしてください。 そして,下のレイヤーのフレーム30を選択してキーフレームにし, その30フレーム目に四角を描いてください。 大きさは適当で良いです。横×縦=4cm×2cm くらいで良いでしょう。 場所はステージの中央より少し左に描いてください。 するとタイムラインは次のようになると思います。 30 60 □ レイヤー 筆・・|○ []| □ レイヤー 筆・・|○ []|●//////////////[]| そして,今描いた四角をムービークリップに変換して, インスタンス名を仮に 「AAA」 としてください。 その「AAA」に次のようなスクリプトを書いてください。 ---------------------------- onClipEvent (load) { this.swapDepths(5); } onClipEvent (enterFrame) { this._x += 4; } ---------------------------- 「このムービークリップの深度を 5 にして, 1フレーム進む時間ごとにこのムービークリップを, 右に 4ピクセル ずつ動かす」 というスクリプトですよね。 それでパブリッシュしてみてください。 フレームには何もスクリプトを書いていない状態なので, 勝手に,60フレームまで行くと,また1フレームに戻ってループすると思います。 ムービークリップは2つになってしまうと思います。 ムービークリップは1つしか作っていないはずですし スクリプトで「コピーしろ」という文章を書いたわけでもありません。 でも,2つになってしまいます。 60フレームから1フレームに戻るとき, 消えるのは,下レイヤーの「AAA」です。 しかし, swapDepths ですでにレイヤー2には存在しないので, 1フレームに戻っても消えないわけです。 上レイヤーの最終フレームである60フレームを選択してキーフレームにしてください。 そして,そのフレームに次のように書いてください。 -------------------------- _root.AAA.removeMovieClip(); -------------------------- そして再びパブリッシュしてみてください。 ムービークリップは2つになりません。 これを作っていらっしゃる物にも適用すれば良いのです。 「HOME」に戻るボタンに ------------------------- for (i=1; i<=4; i++) { _root["m_"+i].removeMovieClip(); } ------------------------- を追加すると, m_1 ~ m_4 は消えると思います。 実際の FLA ファイルを見たわけでも,実験したわけでもないので, 全て推測ですが,おそらく四角緑が重複して表示されることはなくなると思います。 ======================== ちなみに, 上で作った例は _root.AAA._visible = false; ではちゃんと消えません。 一度60フレームまで行ったとき, 一応「AAA」 の _visible は false になって非表示になりますが, 再び30フレームに達したとき, 下レイヤーに出没する「AAA」の _visible は true ですから, それによって, 同じインスタンス名を持つ深度5の「AAA」の _visible も true になってしまうためです。 ======================== さらにちなみに, 今思い出したのでついでに。 前々回のときに書かれていた eval("_root.m_"+i).gotoAndStop(2); ですが,これは, _root["m_"+i].gotoAndStop(2); と同じ意味です。 質問者様が書かれているスクリプトの場合,左辺ではないので,どちらでも良いのですが, eval関数は左辺で使えなくなりました。 「左辺にある Eval() が正常動作しない」 http://www.macromedia.com/jp/support/flash/ts/documents/fl0263.html また,ActionScript3.0 では Removed です。 「ActionScript 2.0 to ActionScript 3.0 Migration」 http://livedocs.macromedia.com/labs/1/flex/langref/migration.html だんだん eval は肩身の狭い存在になってきています。 使用には気を付けてください。 思わぬところで,また変なことになる可能性があります。 ======================== さらにさらにちなみに, 削除されたものをちらっとだけ昨日拝見させていただきました。 それを見て正直かなりビジュアル的には良いセンスはしていると思いました。 けっこう感動です。 (昨日は回答する時間がなかったので回答はできませんでしたけど。) しかし,スクリプトや動作面は… まあ,いきなり,慣れない難しいスクリプトをコピペで使われるより, 簡単なことから自分でスクリプトを書いては実験して, コツコツと知識と感を積み上げる方が良いと思いますよ。 結果的にできるのも早いかもしれません。