• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:gotoAndStopが効かない)

gotoAndStopが効かない

このQ&Aのポイント
  • ActionScript3.0で、sub_base...をaddChildさせた後にgotoAndStop(1)を実行する際にシンタックスエラーが出る。
  • sub_base...のタイムラインをONとOFFで分けるために2フレームにしてstop()を実行しているが、効果がない。
  • 他の方法でsub_base...をaddChildした後にgotoAndStop(1)を実行する方法を知りたい。

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

  • ベストアンサー
  • BlurFiltan
  • ベストアンサー率91% (1611/1754)
回答No.1

普通に this["sub_base"+i]=new SubTitleBase(); mainBoard_mc.addChild(this["sub_base"+i]); this["sub_base"+i].gotoAndStop(1); ではうまく行かないのでしょうか? this["sub_base"+i] とは このタイムラインに置いた sub_base0 や sub_base1 など… という変数ですよ。 その sub_base0 や sub_base1 など… という変数に new な SubTitleBase インスタンスの参照を入れるということです。 「F-site [AS3] MovieClipインスタンスとインスタンス名」 http://f-site.org/articles/2008/04/19014939.html ↑じっくり読んで良く理解しないとわからないと思いますが。。。 というか ActionScript 3.0 になって Flash を始めた方には 何の抵抗も錯覚もないと思いますが それ以前に(ActionScript 2.0 以前に) Flash をしていると その経験や知識が逆に足をひっぱることになって混乱するのかもしれません。

nekoze-man
質問者

お礼

出来ました!! プロパティから「1フレーム目に書き出し」にチェックを入れたらうまくいきました! いつもありがとうございます!! 教えてくれたURLからも勉強します!!

nekoze-man
質問者

補足

ご返信ありがとうございます! this["sub_base"+i].gotoAndStop(1); でもやってみたのですが、エラーはでないのですが、this["sub_base"+i]のなかで1フレームと2フレームがずっとループしていてチカチカなってしまいます。 .gotoAndStop(1)が効いていない状態です。 質問の時に詳しく書いていなかったのですが、これクラス定義で別ファイルに書いてあるのですが、それは関係あるのでしょうか? まだ途中なのですが全部書くとこんな感じで書いてあります。 なにか分かればよろしくお願いします!! package { import flash.display.Sprite; import flash.display.MovieClip; import flash.events.Event; import flash.text.TextFormat; import flash.text.TextFormatAlign; import flash.text.TextField; import flash.text.TextFieldAutoSize; public class Player extends MovieClip{ var mainBoard_mc:MovieClip; var soundTitles:Array; var soundFiles:Array; var sub_base0:SubTitleBase; var sub_base1:SubTitleBase; var sub_base2:SubTitleBase; var sub_base3:SubTitleBase; var kanri_array:Array; function Player(board,titles,files){ mainBoard_mc=board; soundTitles=titles; soundFiles=files; init(); } function init():void{ this.addChild(mainBoard_mc); var sub_titleTF:TextFormat = new TextFormat(); sub_titleTF.font="MS Pゴシック"; sub_titleTF.size=13; sub_titleTF.align=TextFormatAlign.LEFT; sub_titleTF.color=0x000000; kanri_array=new Array(); for(var i:Number=0;i<soundTitles.length;i++){ this["sub_title"+i] = new TextField(); this["sub_title"+i].defaultTextFormat=sub_titleTF; this["sub_title"+i].wordWrap=false; this["sub_title"+i].width=100; this["sub_title"+i].autoSize=TextFieldAutoSize.LEFT; this["sub_title"+i].border=false; this["sub_title"+i].text=soundTitles[i]; var num:Number=i; kanri_array.push(this["sub_title"+i]); kanri_array.name=String(num); this["sub_base"+i]=new SubTitleBase(); mainBoard_mc.addChild(this["sub_base"+i]); this["sub_base"+i].gotoAndStop(1); } } } }

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • AS3.0 ループを利用したムービークリップ生成

    お世話になります。 ソフトはFlashCS3を使用しています。Actionscript3.0で書き出そうと思っています。Actionscript3.0初心者ですがよろしくお願いします。 ライブラリーに Mc01,Mc02,Mc03,Mc04とクラスを指定したムービークリップを準備した状態でステージにムービークリップを生成しようと考えています。その際、for文を使って短く書きたいと思っています。 for (var i=0; i>4; i++){ var "Mc0"+i:"Mc0"+i = new "Mc0"+i(); "Mc0"+i.x = 10*i; "Mc0"+i.y = 10*i; this.addChild("Mc0"+1); } 上記のように書くと「1086:シンタックスエラー:identifierがMcの前に必要です。」とエラーが出てうまく作動しません。 参考までに現在は以下のようにすべて書き出しています。 //ムービクリップ01 var Mc01:Mc01 = new Mc01(); Mc01.x = 0; Mc01.y = 0; this.addChild(Mc01); //ムービクリップ02 var Mc02:Mc02 = new Mc02(); Mc02.x = 10; Mc02.y = 10; this.addChild(Mc02); …… 以下省略 特にfor文にこだわっててはいません。ループで生成できればOKです。 どなたかわかる方よろしくお願いします。

    • ベストアンサー
    • Flash
  • 文字列の置き換え処理について

    いつもお世話になります。 ActionScript3でサイト制作を行なっています。 初歩的な質問で大変恐縮ですが、文字の置き換え処理に関するご質問です。 「a_mc」というムービークリップがあり、関数Aの中で「a_mc」をthis.addChildします。 「b_mc」というムービークリップがあり、関数Aの中で「b_mc」をthis.addChildします。 以下「c_mc」、「d_mc」というムービークリップが続きます。 上記のムービークリップで不要になったものをremoveChildする時に、共通の関数で処理したいと考え、 this.removeChild(*_mc);という感じに*をa~dの文字列に置き換えて処理できるようにしたいと思い、 下記の処理を作成しましたが、「ReferenceError: Error #1065: 変数 b_mc は定義されていません。」 というエラーが表示されてしまいます。 上記の処理を実現するにはどのような処理方法が適切でしょうか? 是非ご教授ください。 宜しくお願い申し上げます。 // コンテンツMC var a_mc:MovieClip = new a_mcs(); var b_mc:MovieClip = new b_mcs(); var c_mc:MovieClip = new c_mcs(); var d_mc:MovieClip = new d_mcs(); this.addChild(a_mc); this.addChild(b_mc); this.addChild(c_mc); this.addChild(d_mc); // コンテンツ消去処理 // 例)ムービークリップb_mcをremoveChildする場合 removeFunc("b"); function removeFunc(str:String):void { var tempStr:String = str + "_mc"; var categoryNameClass:Class = Class(getDefinitionByName(tempStr)); var categoryContents:MovieClip = new categoryNameClass; this.removeChild(categoryContents); }

    • ベストアンサー
    • Flash
  • (AS3)「var mc:MovieClip = new MC?();」 の?の部分を変数にできないか

    タイトルの通りです。 今ライブラリには100個のムービークリップがあって、それぞれMC1~MC100までのリンケージ名(クラス名)でActionScriptに書き出しているものとします。 これらを動的に「var mc:MovieClip = new MC?();」というふうにしたいのですが、うまくいきません。 一応下のように自分なりに考えてみたのですがやっぱりダメでした。 var i:int = 3; var str:String = "MC"+i; var mc:MovieClip = new str(); stage.addChild(mc);

    • ベストアンサー
    • Flash
  • addEventListnerとaddChild

    お世話になります。 Flash初心者です。 ActionScript 3.0でカードゲームみたいなものを作成しようとしていますが、addEventListenerの扱いで行き詰りました。 概要としては (1)絵柄オブジェクトとテキストオブジェクトを組み合わせてカードオブジェクトを作成 (2)カードをaddChildでメインのタイムラインに生成 (3)カードをクリックすると画像が変わる といったことをしたいです。 そのため、メインのタイムラインの1フレーム目に以下のような記述を入れました。(抜粋) --- var player01Card:Array = new Array(); //60枚のカードを生成 for(i=0;i<60;i++){  player01Card[i] = new Card();  addChild(player01Card[i]); } //カードそれぞれに、クリックされたら絵柄が変わるように設定・・・したい for(var i:int; i<player01Card.length ;i++){  player01Card[i].addEventListener(MouseEvent.CLICK,   function(event:MouseEvent):void{    player01Card[i].gotoAndStop(36);   }  ); } --- ・Cardはカードのムービークリップに設定したリンケージです。 ・カードのムービークリップは36フレーム以上あり、画像を変えないため1フレーム目で「stop();」しています。 ・36フレーム目に飛ぶことで絵柄を変えるつもりです。 が、カードをクリックすると -- TypeError: Error #1010: 条件は未定義であり、プロパティがありません。 -- が発生します。 ・gotoAndStopの代わりにカードのムービークリップ上に[画像を生成するメソッド]を作成してそれをたたこうとした場合にも同じエラーが発生します。 ・traceのような関数では問題は発生しないため、ムービークリップを触りにいくことが問題だと思います。 ・player01Card[i].gotoAndStop(36);をaddEventListenerの外に配置した場合は正常に動作します。 ・addChildでなく、最初からメインのタイムラインにインスタンスを配備してやるとgotoAndStopできます。 addEventListenerの仕様なのかと考えているのですが、どう変えてやれば動くのかがまったくわかりません。 一応検索して似たような質問を発見していますが、私のコードには微妙に合いません。 http://okwave.jp/qa/q4646183.html >evnet.target.gotoAndStop(36);としてしまうとカードの合成前の絵柄やテキストがgotoAndStopされてしまう 何が問題なのか、そしてどうすれば動かせるのか教えていただけないでしょうか。

    • ベストアンサー
    • Flash
  • addChildとremoveChildの処理についてご教授ください

    いつもお世話になります。 ActionScript3でサイト制作を行なっています。 初歩的な質問で大変恐縮ですが、addChildとremoveChildの処理に関するご質問です。 予め「a_mc」、「b_mc」、「bg_mc」というムービークリップを作成し、それぞれをリンケージしておきます。 1.ENTER_FRAME内の条件Aの中で「bg_mc」上に「a_mc」をaddChildします。 2.条件Bにあるhoge関数の中で「bg_mc」上に「b_mc」をaddChildします。 3.「a_mc」は不要なのでremoveChildしたいのですが、下記のエラーが出てしまいます。 【ArgumentError: Error #2025: 指定した DisplayObject は呼び出し元の子でなければなりません。】 上記のエラーの原因がよく理解できなかたので、色々試してみましたが、 例えば、条件Aの中でステージ上にaddChildしたオブジェクト「this.addChild(c)」は、 条件Bのhogeの中でremoveChildすることができました。 上記の3の処理ができない原因は何でしょうか? また、上記の処理を実現するにはどのような処理方法が適切でしょうか? 是非ご教授ください。 宜しくお願い申し上げます。 // 背景MC var bg:MovieClip = new bg_mc(); // コンテンツMC var a:MovieClip; var b:MovieClip; this.addEventListener(Event.ENTER_FRAME, visibleCheck); function visibleCheck(eventObject:Event):void {  if(条件A) {   a = new a_mc();   bg.addChild(a);  } else if (条件B) {   hoge();   function hoge():void {    b = new b_mc();    bg.addChild(b);    bg.removeChild(a);   }  } }

  • AS3.0でのattachMovieが分かりません

    AS2.0では リンケージで"mc"という名前で登録。 for (var i:Number=0; i<10; i++) {   var _mc:MovieClip = attachMovie("mc_"+i, "mc_"+i, getNextHighestDepth());   _mc._x = 100*i; } というような感じで10個のmcを配置できますよね。 これをAS3.0でやりたいのですが、 リンケージで"mc"という名前で登録。 他のサイトを参考に、 for (var i:int=0; i<10; i++) {   addChild(new (getDefinitionByName("mc"+i))); } とするが、"変数 mc0 は定義されていません"とコンパイルエラー。。 ひとつ配置するには addChild(new mc) でいけますが forを使って上記AS2.0版と同様の事をやるにはどう定義すればよいのでしょうか。。

    • ベストアンサー
    • Flash
  • swfを読み込む毎にランダムに画像を読み込むには、

    下記のように決まった画像を読み込むスクリプトを現在使用しています。 フラッシュを開く毎に20枚程度の画像の中からランダムに7枚選んで表示させたいのですが、ここから修整するにはどのように考えたら良いのでしょうか? 現在はまったく固定の画像を読み込んでいるだけなのでいいのですが、、。 // 写真のURLを保存する配列 var photoArr:Array // 写真を自動的に変更するタイマー var imageTimer:Timer; // 大きな画像を読み込むローダー var bigImageLoader:Loader; // 現在表示されている画像の番号 var imageNum:Number = 0; //-------------------------------- // 初期化の処理 //-------------------------------- // 配列を設定する photoArr = new Array(); photoArr[0] = "b00.jpg"; photoArr[1] = "b01.jpg"; photoArr[2] = "b02.jpg"; photoArr[3] = "b03.jpg"; photoArr[4] = "b04.jpg"; photoArr[5] = "b05.jpg"; photoArr[6] = "b06.jpg"; // タイマーを起動 startTimer(); // サムネイルを表示 setThumbnail(); // 大きな画像を読み込む loadImage(); //-------------------------------- // 関数 //-------------------------------- // サムネイルを並べる function setThumbnail() { for (var i=0; i<photoArr.length; i++) { // MovieClipを並べる var mc:Thumbnail = new Thumbnail(); mc.y = i * 74; mc.mouseChildren = false; mc.addEventListener(MouseEvent.CLICK, onThumbnailClick); mc.buttonMode = true; mc.num = i; thumbnailTarget.addChild(mc); // サムネイル画像をロードする var loader:Loader = new Loader(); var url = "gallery_img/"+photoArr[i]; var urlRequest = new URLRequest(url); loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onThumbnailLoad); loader.load(urlRequest); loader.x = 4; loader.y = 17; mc.addChild(loader); } } // タイマーをスタートする function startTimer() { imageTimer = new Timer(8000, 0); imageTimer.start(); imageTimer.addEventListener(TimerEvent.TIMER, onTimerCalled); } // 大きな画像を読み込む function loadImage() { // サムネイルの背景色を変える for (var i=0; i<photoArr.length; i++) { var mc = thumbnailTarget.getChildAt(i+1); if (i == imageNum) { mc.gotoAndStop(2); mc.scaleX = 1.1; mc.scaleY = 1.1; } else { mc.gotoAndStop(1); mc.scaleX = 1; mc.scaleY = 1; } } // 表示されている画像を消す if (bigImageLoader != null) { mainTarget.removeChild(bigImageLoader); } // 新しい画像を読み込む var url = "gallery_img/"+photoArr[imageNum]; var req = new URLRequest(url); bigImageLoader = new Loader(); bigImageLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, onImageLoad); bigImageLoader.load(req); mainTarget.addChild(bigImageLoader); } //-------------------------------- // イベント //-------------------------------- // サムネイルが押されたら実行される function onThumbnailClick(eventObj) { imageNum = eventObj.target.num; loadImage(); imageTimer.stop(); imageTimer.start(); } // サムネイルがロードされたら実行される function onThumbnailLoad(eventObj) { var mc = eventObj.target.loader; mc.width = 80; mc.height = 55; } // タイマーが呼ばれるたびに実行される function onTimerCalled(eventObj) { imageNum++; if (imageNum >= photoArr.length) { imageNum = 0; } // 大きな画像を読み込む loadImage(); } // 大きな画像が読み込まれたら実行される function onImageLoad(eventObj) { // bigImageLoader.alpha = 0; stage.addEventListener(Event.ENTER_FRAME, onFadeIn); } // function onFadeIn(eventObj) { // フェードインをつける bigImageLoader.alpha += 0.05; if (bigImageLoader.alpha >= 1) { removeEventListener(Event.ENTER_FRAME, onFadeIn); } }

    • ベストアンサー
    • Flash
  • removeChild()についてご教授願います。

    AS3.0の初心者です。 Stratボタン、Stopボタンで以下のスクリプトで表示と非表示を繰返ししたいのですが、 Stopボタンで、単にremoveChild();にしますと、 「#2025: 指定した DisplayObject は呼び出し元の子でなければなりません。」 とエラーとなります。 色々と調べてみたのですが、よく判判りません。 Stopボタンの記述をどの様にすればよいのでしょうか? 初歩的質問で大変恐縮ですが、どうかご教授お願い致します。 [メインスクリプト] var stageH = stage.stageHeight; var stageW = stage.stageWidth; //Stratボタン start.addEventListener(MouseEvent.MOUSE_DOWN,gene); function gene(e:Event):void { for (var i = 0; i < 20; i++) { var mc:Candy = new Candy(); mc.x = Math.random()*stageW + 10; mc.y = Math.random()*stageH + 10; addChild(mc); } } //Stopボタン stop.addEventListener(MouseEvent.MOUSE_DOWN,stp); function stp(e:Event):void { removeChild(mc); この部分がよく判らないのですが、 どの様に記述したら良いのでしょうか? } --------------------------------------- [mc のスクリプト] var mcH:int = this.height; var mcW:int = this.width; var stageH = stage.stageHeight; var stageW = stage.stageWidth; var speedY:uint = Math.random() * 5 + 5; var speedX:uint = Math.random() * 2; addEventListener(Event.ENTER_FRAME,loop); function loop(Event):void { y += speedY; x += speedX; if ( y > stageH ) { y = - mcH; } if ( x > stageW ) { x = - mcW; } } -----------------------------------------

    • ベストアンサー
    • Flash
  • AS3.0でムービークリップ制御

    現在、AS3.0でswfファイルを読み込み、その再生・停止をコントロールするswfを作ろうとしています。 そこで自分なりにプログラム書いてみたのですが、停止ができなくて困っています。 以下ソース package { import flash.display.*; import flash.events.*; import flash.net.URLRequest; public class Test extends Sprite { private var mc:MovieClip = new MovieClip(); private var btn_load:SimpleButton = new SimpleButton(); //loadボタン private var btn_stop:SimpleButton = new SimpleButton(); //stopボタン private var l:Loader = new Loader(); public function Test() { mc.x = 30; mc.y = 30; btn_load.upState = this.drawCircle( 0x228822, 20 ); btn_load.overState = this.drawCircle( 0x225522, 21 ); btn_load.downState = this.drawCircle( 0x553355, 20 ); btn_load.hitTestState = btn_load.upState; btn_load.addEventListener( MouseEvent.CLICK, Load ); btn_stop.upState = this.drawCircle( 0x228822, 20 ); btn_stop.overState = this.drawCircle( 0x225522, 21 ); btn_stop.downState = this.drawCircle( 0x553355, 20 ); btn_stop.hitTestState = btn_stop.upState; btn_stop.x = 50; btn_stop.addEventListener(MouseEvent.CLICK, Stop); addChild(mc); addChild(btn_load); addChild(btn_stop); mc.addChild(l); } private function drawCircle( color:uint, r:Number ):Shape { var circle:Shape = new Shape(); circle.graphics.lineStyle( 1, 0x222222 ); circle.graphics.beginFill( color ); circle.graphics.drawCircle( 0, 0, r ); circle.graphics.endFill(); return circle; } private function Load(e:Event):void{ l.load(new URLRequest("animation.swf")); } private function Stop(e:Event):void{ mc.stop(); } } } なにが原因なのでしょうか・・・ わかる方ご回答お願いします。。

    • ベストアンサー
    • Flash
  • getURLへの変数が参照されない

    こんにちは。 FLASH ActionScript2の、getURLへの変数が参照されない件で困っています。 MC1をRollOverするとテキストフィールドareaにTarea1(あ)が入り、 更にMC1をクリックするとTurl1(a)のURLに飛ぶ、というスクリプトを作っています。 しかし現状ですと、RollOverはうまくいくのですが、クリックしたときのgetURLがうまくいきません。 変数「a.html」に飛ばず、「Turl1.html」に飛んでしまいます。 変数が参照されていないということなのでしょうか。 なにぶん初心者ですので、質問自体に誤りがあるかもしれませんが、ご教授頂けたらと思います。 よろしくお願いします。 ■スクリプト var Tarea0 = ""; var Tarea1 = "あ"; var Tarea2 = "い"; var Tarea3 = "う"; . . var Tarea42 = "ゆ"; var Tarea43 = "よ"; var Tarea44 = "ら"; var Turl1 = "a"; var Turl2 = "i"; var Turl3 = "u"; . . var Turl42 = "yu"; var Turl43 = "yo"; var Turl44 = "ra"; i = 0; sx = 0; for (x=0; x<45; x++) { str = "mc"+String(i); _root["mc"+i].Tarea = "Tarea"+i; _root["mc"+i].onRollOver = function() { area.variable = this.Tarea; }; _root["mc"+i].onRollOut = function() { area.variable = "Tarea0"; }; _root["mc"+i].Turl = "Turl"+i + ".html"; _root["mc"+i].onRelease = function() { getURL(this.Turl); }; i++; } ■環境 WINDOWS XP FLASH8 ActionScript2.0

    • ベストアンサー
    • Flash