removeMovieClip()で画面が固まる

このQ&Aのポイント
  • 透明ムービークリップ上でマウスをクリックすると、ライブラリに登録されたムービークリップシンボルをattachMovie()で生成するflashを作っています。生成するのはできるのですが、「Clear」ボタンをつくり、ボタンを押すと、生成したインスタンスをすべて一度に削除するスクリプトを仕込んでいます。
  • しかし、Clearボタンを押すとFlashが固まります。たぶん、スクリプトの書き方に問題があると思うのですがわかりません。わかる方がいらっしゃったらお教え願います。
  • FlashのremoveMovieClip()関数に問題がある可能性があります。また、生成されたインスタンスを削除する際に、カウンター変数のリセットを忘れている可能性もあります。
回答を見る
  • ベストアンサー

removeMovieClip()で画面が固まる

こんばんは。 透明ムービークリップ上でマウスをクリックすると、ライブラリに登録されたムービークリップシンボルをattachMovie()で生成するflashを作っています。生成するのはできるのですが、「Clear」ボタンをつくり、ボタンを押すと、生成したインスタンスをすべて一度に削除するスクリプトを仕込んでいます。しかし、Clearボタンを押すとFlashが固まります。たぶん、スクリプトの書き方に問題があると思うのですがわかりません。わかる方がいらっしゃったらお教え願います。 //インスタンスを生成するスクリプト onClipEvent(load) { count = 0; } onClipEvent(enterFrame) { this.onPress = function() { count++; mouseX = _root._xmouse; mouseY = _root._ymouse; charaName = "Chara" + count; obj_format = {_x:mouseX,_y:mouseY}; attachMovie("chara1",charaName,count,obj_format); } } //インスタンスを削除するスクリプト on(press) { for(i = 1;i <= count; i++) { tmp = "Chara" + i; _root[tmp].removeMovieClip(); } count = 0; }

  • Flash
  • 回答数1
  • ありがとう数2

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

  • ベストアンサー
noname#35109
noname#35109
回答No.1

スクリプトの書き方に問題があるというか, 何をしたいのか,よくわかりませんが… 確認ですが > //インスタンスを削除するスクリプト > on(press) { >  ~ 略 ~ を書いているのは,透明のムービークリップ外の別のボタンですよね。 でないと, this.onPress と on(press) が重なってしまいますもんね。 透明のムービークリップに aaa というインスタンス名を付けて, インスタンスを削除するボタンには ---------------------------- on (press) { for (i=1; i<=_root.aaa.count; i++) { tmp = "Chara"+i; _root.aaa[tmp].removeMovieClip(); } _root.aaa.count = 0; } ---------------------------- と書くと,固まることもなくちゃんと Chara1~Chara i は消えました。 透明のムービークリップに書いた count は透明のムービークリップ内の変数です。 一方,ボタンは, _root に置かれたものなら _root の変数 count を参照して, for (i=1; i<=count; i++) をループさせようとします。 count は未定義なので,固まってしまうのです。 書かれているスクリプトの for 以下を // で注釈行にして, trace(count); としてみました。↓ ---------------------------- on (press) { trace(count); // for (i=1; i<=count; i++) { // tmp = "Chara"+i; // _root[tmp].removeMovieClip(); // } // count = 0; } ---------------------------- そして,ムービープレビューして,そのボタンをクリックすると 「undefined」と表示されました。 for (i=1; i<=undefined; i++) なので暴走するのです。 また,Chara1~Chara i も,_root にはできず,透明のムービークリップ内にできます。 その点が要注意です。 解決策は以上です。 ================================ あと,よくわからない点ですが,なぜ, onClipEvent (enterFrame) の中に, this.onPress = function() が入っているのでしょうか。意味がわかりません。 そんなところに書いても,Press したときににしか function() は実行されません。 ------------------------------- onClipEvent (load) { count = 0; this.onPress = function() { count++; mouseX = _root._xmouse; mouseY = _root._ymouse; charaName = "Chara"+count; obj_format = {_x:mouseX, _y:mouseY}; attachMovie("chara1", charaName, count, obj_format); }; } ------------------------------- もしくは, ------------------------------- onClipEvent(load) { count = 0; } on (press) { count++; mouseX = _root._xmouse; mouseY = _root._ymouse; charaName = "Chara"+count; obj_format = {_x:mouseX, _y:mouseY}; attachMovie("chara1", charaName, count, obj_format); } ------------------------------- で良いと思います。

gunkiti
質問者

お礼

ご回答ありがとうございます。説明が下手で申し訳ございません。count変数に対するパスが間違っていたんですね。あと、attachMovie()で生成したインスタンスがどこにできるのかがわからなかったんですが、_rootにできるのではなく、透明ムービークリップ内にできるんですね。知りたかったことがわかってすごくありがたいです。ここで回答してくださる方はみんな説明が上手だなぁ・・・

関連するQ&A

  • attachMovieで生成したインスタンスを消す方法

    1.現在A.B.C・・・・という名前の多数のボタンがあります 2.それぞれをクリックすると、A1.B1.C1・・・・とそれぞれのインスタンスがZ_mcというムービークリップ内に生成されます。その時にボタンに記述したスクリプト on (press) { Z_mc.attachMovie( "識別子", "A1", 1); } 3.このままですとA.B.C・・・・とボタンをクリックしていくとインスタンスがA1.B1.C1・・・・と同じ場所に生成されるため、重なってしまいます。 どのようにボタンにスクリプトを記載すれば、前に生成されたインスタンスを削除して、新しいインスタンスを生成できるのでしょうか?よろしくお願いします。

    • ベストアンサー
    • Flash
  • 画面上にランダムでムービークリップを登場させたい

    5つのムービークリップをランダムで入れ替えて表示させ たいと思っています。 以前に下記URLの質問で詳しい回答がされていましたので、 説明の通りにやってみたのですがスクリプトのエラーで うまくいきません。 http://oshiete1.goo.ne.jp/qa1880922.html パブリッシュすると、 _root.attachMovie(["chara"+a], "chara", 0); の部分で「タイプが一致しません。」というエラーが でてしまうのです。 問題点を教えていただけませんでしょうか。 私の作業環境は、WindowsのFlash8です。 どうぞよろしくお願いいたします。

    • ベストアンサー
    • Flash
  • attachMovieしたmovieClipを動かすには?

    attachMovieで作ったmovieClipを動かすためには、どうすればよいのでしょうか? 下にあるスクリプトは変数var objに代入していますが、このobjを動かすための var obj=attachMovie("chugoku","ball1","0"); obj._x = 200; obj._y = 150; onClipEvent(load){ var div:Number = 0.3; var move_to:Number = 200; } onClipEvent(enterFrame){ move_to = 500; obj._x += (move_to-obj._x)*div; } loadとenterFrameはどのように記述すれば動かせるのでしょうか?

    • ベストアンサー
    • Flash
  • 配列での管理について

    外部JPGファイル名が記述してあるXMLファイルを読み込んで,サムネイルインスタンスを生成したいと思います。 構想としては 1、読み込んだXMLファイルのノードの数(変数名:menu_num)を参照。 2、ノード数の分attachMovieメソッドでシンボル(識別子:thum-menu)の生成を繰り返す 3、生成したシンボルに含まれるムービークリップインスタンス(インスタンス名:jpg_mc)にloadMovieメソッドで外部JPGをロードする 途中まで作ったフレームアクションが下記の通りです。 // 1 System.useCodepage = true; var obj_xml:XML = new XML(); obj_xml.ignoreWhite = true; obj_xml.load("sample.xml"); obj_xml.onLoad = start_me; function start_me(success:Boolean):Void {    if (success == true) {    var nodeList:Array = obj_xml.firstChild.childNodes;    var menu_num:Number = nodeList.length; // 2. インスタンスの生成と設定   for (var i:Number = 1; i<=menu_num; i++) {    var menu_str:String = "thum-menu0"+i;     _root.attachMovie("thum-menu", menu_str, i);    trace(i); これ以降(行程2)で生成した複数のシンボルを配列で管理したいのですが、なかなかうまくいきません。どなたかおしえていただければ幸いです。 ちなみにXMLファイルのノード数の取得はちゃんとできてるようです。 使用ソフトは Flash 8 で ActionScript2.0 です。

  • attachMovieでのインスタンス名

    以下のようなスクリプトを書いているのですが、 traceの値がすべてmenu_mcとなってしまいます。 インスタンス名をmenu1_mc,menu2_mc,menu3_mc,・・・としたいのですが、どうすればいいのでしょうか? i = 10; for(y = 0; y < i; y++) { trace(y); m = y+1; obj = _root.attachMovie("menu", "menu"+m, y); obj._x = 30; obj._y = 70*y; trace(this._name); } 環境はFlashCS3、ActionScript2.0です。 よろしくお願いします。

    • ベストアンサー
    • Flash
  • htmlのインラインフレームのような事を実装したい

    こんにちは、今ひとつどうしても解決できない事があり、質問させて頂きました。大変お手数をおかけしますがご教授頂ければ幸いです。 データベースから引っ張ったデータを画像ファイル名と照合して、その画像ファイルを読み込むムービークリップのインスタンスをattachMovieで動的に生成して、下へ下へリストのように表示していきたいのですが、普通に_rootムービークリップなどにattachMovieで生成していくと、データの数が多い場合には、ウィンドウよりも下に生成していってしまい、見えなくなってしまいます。(生成インスタンスのY座標がStage.height以上に) そこで、htmlでいうiframeのようにして、データが多くなってもスクロールバーで制御できるようにしたいのですが、どのようにすれば良いのか散々探したのですが、見つけることが出来ませんでした。 静的なものであれば単純にScrollPaneにムービークリップを指定すれば良いと思うのですが、データは常に変化するので、常時監視して、そのリストが常にスクロールによって全て見ることができるようにしたいのですが、何か方法はありますでしょうか?

  • 音のアクションスクリプトについて

    ActionScriptを使った音のスクリプトについて勉強しています。ステージ上に二つの音楽プレーヤーを設置し音楽を流す、という事からはじめてみたのですが、上手く行かずに困っています。 設置した音量+/-ボタンを押すと両方の音量が変わってしまったり、片側を再生している状態で、もう一方を再生すると、もう一方は停止してしまったり(目的的には困らないのですが、本来両方とも再生され音がでているのが本来の姿のようなので)、といった状態です。 何かを間違えた理解と書き方をしていると思うのですが、間違いの指摘や音のアクションスクリプトの書き方についてご教授いただければと思い、質問させていただきました。 複数音楽プレイヤーを設置 という事がしたい場合のアドバイスやご教授をいただきたく思います。 よろしくお願いします。 ステージ  MC01(インスタンス名、I_MC01)   L__MC再生ボタン(インスタンス名、I_saisei)   L__MC音量+ボタン   L__MC再生-ボタン  MC02(インスタンス名、I_MC02)   L__MC再生ボタン(インスタンス名、I_saisei)   L__MC音量+ボタン   L__MC再生-ボタン と二つのシンボルがステージ上に配置し、各MCに再生ボタンと音量+/-ボタンを配置しています。 MC01 onClipEvent (load) {    Hsound_MC01 = new Sound(I_MC01);    Hsound_MC01.attachSound("RS_MC01"); } MC再生ボタン onClipEvent (load) {    Hvol= 50; } on (release) {    _root.I_MC01.Hsound_MC01.stop();    _root.I_MC01.Hsound_MC01.start(); } onClipEvent (enterFrame) {    _root.I_MC01.Hsound_MC01.setVolume(this.Hvol); } MC音量+ボタンon (release) {    if (_root.I_MC01.I_saisei.Hvol<100) {       _root.I_MC01.I_saisei.Hvol += 10; } } と書きました。MC02も同じで、01と02が違うだけです。

    • ベストアンサー
    • Flash
  • 【ActionScript】createEmptyMovieClipの寸法を変えたい

    FLASH8(Win-XP)使用者です。 createEmptyMovieClipで生成したMCに外部画像を読み込む場合、その画像の寸法を変える場合どうしたらいいでしょうか? (attachMovie以外でお願いいたします。) _root.obj.createEmptyMovieClip("mc", 0); _root.obj.mc.loadMovie("aaa.swf"); _root.obj.mc._width = 100; ですと読み込んだ画像は消えてしまいます。 お詳しい方、よろしくお願いいたします。

    • ベストアンサー
    • Flash
  • AS2をAS3にしたい

    AS2で書かれたスクリプトの一部があります。下記をAS3にしたいのですが。 ちなみに、mcはインスタンス名です。  onClipEvent (load) {      pointX = 10;     pointY = 20;  }  onClipEvent (mouseMove) {       _root.mc._x = _root._xmouse + pointX;       _root.mc._y = _root._ymouse + pointY;     }

    • ベストアンサー
    • Flash
  • マウスカーソルをカスタマイズしたのですが…

    FlashCS4でAS3.0を使用しています。 マウスポインタを任意の形を作成して、ムービークリップにして、インスタンス名を「point_mc」として、ステージ上に配置し、スクリプトを下記のように記述しました。 ---------------------------------------------------------- Mouse.hide(); stage.addEventListener(MouseEvent.MOUSE_MOVE, function(e){ point_mc.x=stage.mouseX; point_mc.y=stage.mouseY; }); --------------------------------------------------------- その後にムービープレビューしますと、マウスのカーソルが先の任意に作成(point_mc)したのに変わってました。 そこまでは良かったのですが、その変わったマウスをボタンインスタンス(インスタンス名:skip_bt)に乗せても、ロールオーバーもしなければ、ボタンをクリックする事が出来ないのです。 因みに「skip_bt」に対するスクリプトは下記のように記述しました。 -------------------------------------------------------- skip_bt.addEventListener(MouseEvent.CLICK, introClick); function introClick(evt:MouseEvent):void { gotoAndStop("intro"); } -------------------------------------------------------- このままだと、ただマウスカーソルが、任意で作成したムービークリップになっているだけで、ボタンを押したりする事が出来ません。クリックする事が出来なくて困ってます。 解る方がおりましたら、アドバイス・ご指導をお願い致します。 よろしくお願い致します。

専門家に質問してみよう