• ベストアンサー

教えて下さい!ActionScriptで・・・

Flash8をWindowsXP SP2で使用しております。 Fumio Nonaka.com様の3D_Boxについての質問です。 Fumio Nonaka.com様の3D_Boxのアクションスクリプトを、 フレーム1に記入して、 ボタンでフレーム2に移動するようにしていますが、 フレーム2に移動しても立方体が消えずにずっと描画されています。 どなたか消す方法を教えて下さい。よろしくお願いします。 <利用させて頂いているアクションスクリプトの掲載URL> http://www.fumiononaka.com/Sample/3D_Box/3D_Box.html 下段のSource to download (約192KB/Flash 8形式): 3D_Box.zip

質問者が選んだベストアンサー

  • ベストアンサー
  • is_may
  • ベストアンサー率65% (58/89)
回答No.1

原作をいじらなかった場合は2フレーム目に my_mc.removeMovieClip (); を追加すれば消えます。

rose_web
質問者

お礼

ありがとうございます!消えました! my_mc.removeMovieClip ();” でどのようなことが起きているのか教えて頂けたら嬉しいです。 フレーム1・2・3間をボタンで移動する場合、 フレーム2に3D_Boxのアクションスクリプトを記入した場合は、 フレーム1と3に”my_mc.removeMovieClip ();”を記入したら消えるのですが、 フレーム移動が多数ある場合は、各フレームの開始位置に記入していく以外方法はないのですか? たくさんの質問申し訳ございません。

その他の回答 (1)

noname#35109
noname#35109
回答No.2

#1の方ではありませんが。 > my_mc.removeMovieClip ();” > でどのようなことが起きているのか教えて頂けたら嬉しいです。 その向学心は良いと思いますが, 以降はなるべく自分で調べるようにしましょう。 調べて意味が分かって実際に使って行かないと先には進めませんよ。 ActionScript でも,それ以外の言語でもそうですが, 「こうしたいときにどの言葉をどういうように使うのか」 という部分を知る部分が難関なのです。 「こうしたいときにどの言葉をどういうように使うのか」 さえわかれば, 「その言葉は何を意味するのか」ということは ネット検索やヘルプでいくらでもその意味は調べることができるはずです。 Flashドキュメンテーション(Flash 8 ヘルプのネット版) removeMovieClip (MovieClip.removeMovieClip メソッド) http://livedocs.adobe.com/flash/8_jp/main/00002510.html  ~引用~ > duplicateMovieClip()、MovieClip.duplicateMovieClip() > MovieClip.createEmptyMovieClip() または > MovieClip.attachMovie() で作成した > ムービークリップインスタンスを削除します。 それに removeMovieClip の remove はもともと英語ですね。 「re・move - goo 辞書」 http://dictionary.goo.ne.jp/search.php?MT=remove&kind=ej&mode=0&base=1&row=0 片づける とか 除去する とか取り去る という意味です。 MovieClip はムービークリップ です。 したがって,  my_mc.removeMovieClip();  → my_mc というインスタンス名の    ムービークリップインスタンスを削除する となります。 3D_Box のスクリプト中にある // 立方体描画用のMovieClipインスタンス作成 var my_mc:MovieClip = this.createEmptyMovieClip("scene_mc", this.getNextHighestDepth()); これで作成された my_mc を削除します。 my_mc.removeMovieClip(); の文法は,  オブジェクト . メソッド(); となっています。 メソッドはオブジェクトに対する命令のようなものです。 この文法で日常的な例文を書くと  5963ナンバーの車 . 止まりなさい(); というような感じになります。 > フレーム移動が多数ある場合は、 > 各フレームの開始位置に記入していく > 以外方法はないのですか? 普通に考えたら,すぐに思い付きませんでしょうか? > フレーム1・2・3間をボタンで移動する場合 なのですから, フレーム1 以外への移動するボタンに my_mc.removeMovieClip(); を書けば良いでしょう。 ---例-------------------- on (release) { gotoAndStop(2); my_mc.removeMovieClip(); } ------------------------- 他のフレームのボタンには書く必要はありません。 フレーム1 に 3D_Box のスクリプトが書いてあるのであれば, フレーム1 が表示されるときにだけ 3D_Box が登場します。 例えば フレーム2 から フレーム3 に行くボタンには, my_mc.removeMovieClip(); を書く必要はありません。 それとも, フレーム1 の各ボタンに書くのも面倒なのでしょうか? それも面倒なのでしたら,Flash は作成できないと思いますが...。 もし,それも面倒なのであれば自分でしっかり考えましょう。 「手間暇かけて作る」か,「脳細胞を使って考える」か のどちらかは必要です。 my_mc.removeMovieClip(); を使うタイミングは, #1 の方が回答してくださっている案のように, 「他のフレームに行ったときに実行」 しても良いですし, 上の案のようにように, 「ボタンをクリックしたときに実行」 しても良いです。 その両方ともが面倒なのであれば, 「○○したときに実行」の ○○ を考えるしかありません。  ~私の考え~  「フレーム1 を脱出したときに実行」 これで良いのではないでしょうか。 しかし,最初にも書きましたように, 「こうしたいときにどの言葉をどういうように使うのか」 を知ることが難関なのですよ。 「フレーム1 を脱出したときに実行」 は考えとして良かったとしても, それを実行させる方法や言葉を見つけなければなりません。 そこで考えます。 上の例に従うと,  ムービークリップを削除=removeMovieClip なのですから,  フレームを出る=exitFrame これで行けるのではないでしょうか! 3D_Box の長いスクリプトの後に, 次の ××× 内を追加して書けばできる気がします。 ×××××××××××××××××× // このフレームを出るときに実行 this.onExitFrame = functiion(){ // my_mc を削除 my_mc.removeMovieClip(); } ×××××××××××××××××× できましたか? もしやってみると....... できないと思います。 できないのが正常です。 上の ××× のスクリプトはまっ赤な嘘ですから。 ExitFrame という言葉は, 同じ Adobe の Director の Lingo という言語には存在しますが, ActionScript には存在しません。 また Director であっても,ボタンで違うフレームにジャンプするような場合は使えません。 ただ自然にそのフレームを抜け出るときだけにはたらくイベントハンドラです。 Google検索「ExitFrame」 http://www.google.co.jp/search?hl=ja&q=ExitFrame&lr=lang_ja やはり, 「こうしたいときにどの言葉をどういうように使うのか」 というのが難関ですよね。 この嘘は,そのことが言いたかっただけの嘘です。 次こそは本当のスクリプトです。 3D_Box の長いスクリプトの後に, 次の ------ 内を追加して書けばできると思います。 「フレーム1 を脱出したときに実行」 を実現できるように私なりに考えたものです。 --------------------------- // 1フレーム進時間ごとに毎回実行 this.onEnterFrame = function() { // もしこの階層のフレームが 1 でなけでば if (this._currentframe != 1) { // my_mc を削除 my_mc.removeMovieClip(); // この onEnterFrame を削除 delete this.onEnterFrame; } }; --------------------------- これで,各フレームにも,各ボタンにも, my_mc.removeMovieClip(); は書かずに済みます。 ネット上の一般サイトにもたくさん参考になるページはあると思いますが, 一応ヘルプだけから上のスクリプトの意味を知る上での参考ページのURLを書いておきます。 Flashドキュメンテーション(Flash 8 ヘルプのネット版) // コメント行区切り記号演算子 http://livedocs.adobe.com/flash/8_jp/main/00001836.html . ドット演算子 http://livedocs.adobe.com/flash/8_jp/main/00001821.html this プロパティ http://livedocs.adobe.com/flash/8_jp/main/00001795.html onEnterFrame (MovieClip.onEnterFrame ハンドラ) http://livedocs.adobe.com/flash/8_jp/main/00002490.html if ステートメントの使用 http://livedocs.adobe.com/flash/8_jp/main/00001241.html _currentframe (MovieClip._currentframe プロパティ) http://livedocs.adobe.com/flash/8_jp/main/00002449.html != 不等価演算子 http://livedocs.adobe.com/flash/8_jp/main/00001829.html delete ステートメント http://livedocs.adobe.com/flash/8_jp/main/00001865.html ヘルプは難しいですから, 読んだだけで全てを理解することは不可能だと思いますし, また,全てを理解する必要はありませんよ。 とりあえず「そんな感じのことか…」だけで良いと思います。 もっと理解したい場合はネット検索もしてみる方が良いです。 ネット検索でもヘルプでも良いですから, 「そんな感じのことか…」をまず理解して, 自分で使って行くと "実感で"「そういうことか!」がわかるようになります。 自分で使って実感しないと理解はできません。

rose_web
質問者

お礼

厳しいご意見、丁寧なご説明に感謝します。 「こうしたいときにどの言葉をどういうように使うのか」まさに仰る通りだと思います。 もっと勉強して、色々なデザインのFLASHが作れるように頑張ります。