ループで使用している変数をうまく使いたいです。

このQ&Aのポイント
  • 複数のボタンを造って、それぞれのボタンによって、移動先を変えたいのですが、今のままでは一箇所にしか移動できません。
  • 変数を使用して繰り返し処理を行い、ボタンの移動先を動的に変更する方法を知りたいです。
  • 現在のコードでは、ループ変数が適切に使用されず、ボタンの移動先が一箇所に固定されています。適切な方法を教えてください。
回答を見る
  • ベストアンサー

ループで使用している変数をうまく使いたいです。

ループで使用している変数をうまく使いたいです。 複数のボタンを造って、それぞれのボタンによって、移動先を変えたいのですが、 下に書いてあるソースのように、今のままでは一箇所にしか移動できません。 色々考えたのです、私の少ない知識では何も出てきません。 どうか教えてください。 お忙しい中申し訳御座いませんが、宜しくお願いいたします。 var number function OverBot(number){ gotoAndPlay(["box" + number]); } for( i = 0; i < 8; i++){ this["point" + i].onRollOver = function():Void { OverBot(i); } }

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

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

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

つい最近,同じようなご質問に回答しました。 質問「for & duplicateMovieClip & function」: OKWave http://okwave.jp/qa/q5938068.html (つい最近というか,定期的にしょっちゅう同じような質問に回答しています。。。)

ringo_1
質問者

お礼

ありがとう御座いますm(_ _)m 皆さん同じようなところで悩むんですね。 無事動かすことが出来ました。 本当にありがとう御座いました。

関連するQ&A

  • ムービークリップの中のボタンからURLを表示させたい

    flash8を使用しています。今、作成しているものは クリックして開けた箱の中にボタンが隠れていて そのボタンをさらにクリックすると あるURLが表示される・・・というflashを作成したいのですが、 この箱の中のボタンに対する下記の表記では表示されません。 on (release) { getURL("http://www.***"); } ムービークリップ(開く箱)の中の構造は up・over・release・outでフレームを区切っており、 箱のフタが閉じた状態から開くように設定しています。 ここまでの動作は問題なく出来ているのですが、 中に入れたボタンをクリックしても 表示したいURLが表示されないんです。 ちなみにこの箱のムービークリップに対する メインタイムラインのスクリプトは・・・ var box:MovieClip; box.onRollOver = openBox; box.onRollOut = closeBox; box.onRelease = breakBox; box.onReleaseOutside = closeBox; function openBox():Void { this.gotoAndPlay("over"); } function closeBox():Void { this.gotoAndPlay("out"); } function breakBox():Void { this.gotoAndPlay("release"); } というように指示しています。 試しに、この箱のムービークリップではなく、 フレームで区切ってない単純なムービークリップの中に ボタンを置いたらURLが表示されるので このフレーム区切りが反応させない原因なのでしょうか? 何か解決方法はないのでしょうか? ご教示願います。

    • ベストアンサー
    • 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
  • 関数の引数とグローバル変数について

    javascript初心者です。 どうしても分からないことがあるので質問させて頂きます。 グローバル変数の値を関数で処理して増やしコンソールログに表示していく、 というようなソースがあるとします。(以下) //グローバル変数 var a = 0; var b = 0; var c = 0; //計算する関数 var afunc = function(){   a++;   console.log(a); } var bfunc = function(){   b++;   console.log(b); } var cfunc = function(){   c++;   console.log(c); //onclickなどで呼び出す関数 function test1(){   var aplus = new afunc(); } function test2(){   var aplus = new bfunc(); } function test3(){   var aplus = new cfunc(); } グローバル変数や関数などが3つと数が少ないならこれでもいいかも知れませんが、 これが数十個とかに増えると、ソースの量もかなり多くなり 管理も大変になると思い簡略化させたいと考えました。 そこで以下のように変えてみたのですが、 加算がうまくいきません。 //グローバル変数 var a = 0; var b = 0; var c = 0; //計算する関数 vvar xxfunc = function(xx){   this.xx = xx;   this.show = function() {     this.xx++;     console.log(this.xx);   } } //onclickなどで呼び出す関数 function test1(){   var aplus = new xxfunc(a);   aplus.show(); } function test2(){   var aplus = new xxfunc(b);   aplus.show(); } function test3(){   var aplus = new xxfunc(c);   aplus.show(); } もしかすると、関数の引数にはグローバル変数を指定することができないのでしょうか? 何かうまいやり方はあるでしょうか? プログラミング自体が勉強し始めたばかりなので、 おかしなソースの書き方をしているかもしれませんのが、 ご教授、よろしくお願いいたします。

  • forでonRollOverを一括指定

    rootにはbox0~49までの50個のムービークリップがあります。 これらのムービークリップのそれぞれのロールオーバー時に、xmlから読み込んで配列に格納したそれぞれ別のテキストnodeLists[*].titleNameを、 別の一つのムービークリップentrybase内のダイナミックテキストtitle_txtに表示したいのですが、フレームからforなどで一括で指定することはできないのでしょうか。 box0.onRollOver=function(){ entrybase.title_txt.text=nodeLists[0].titleName; } ~ box49.onRollOver=function(){ entrybase.title_txt.text=nodeLists[49].titleName; } これだと動きますが、長いので、 for (var i:Number = 0; i<=49; i++) { ["box"+i].onRollOver=function(){ entrybase.title_txt.text=nodeLists[i].titleName; } } とやってみたんですが、エラーになり、 for (var i:Number = 0; i<=49; i++) { kari="box"+i kari.onRollOver=function(){ entrybase.title_txt.text=nodeLists[i].titleName; } } とやってみてもやっぱりだめでした。なんとなくダメな理屈はわかるんですが、うまく短く指定する方法はないものでしょうか? Flash8 ActionScript2.0 Player:8 で作成しています。

    • ベストアンサー
    • Flash
  • javascriptのforループ中の変数について質問です。

    javascriptのforループ中の変数について質問です。 下記のようなコードを書きました。 function test(){ for (i = 0;i < 3;i++){ var msg = "msg"+i; setTimeout(function(){ alert(msg); },1000 * i); } } これを実行すると、1秒間隔で順番に"msg2"→"msg2"→"msg2"と表示されます。 しかし、期待する動作は1秒間隔で順番に"msg0"→"msg1"→"msg2"なのです。 この動作を実現するために、どのようにスクリプトを修正すればよいか、ご教授いただければ幸いです。

  • AS初心者です。フレームループするメニューを作りたいのですが・・・

    ■環境 WindowsXP/FLASH 8pro/AS2.0 ■実現したいフラッシュのあるサイト http://www.first-jp.com/ このサイトの上部にあるスクロールしているFLASHです。 かなりの初心者なのですが、本を参考にして作っています。 まだまだ完成にはほど遠いのですが、現段階でこのような状態です。 http://dragstarnavi.web.fc2.com/navi/navi.html ■構造 メインのタイムライン1フレーム目に下記のASを記述。 メインのタイムライン1フレーム目にボタンを設置(MC可、左は「left-botton」右は「right-botton」) ■メインタイムラインに記載しているAS var obj_array:Array = new Array(); //配列の生成 var center:Number = Stage.width/2; //ステージ中心X座標 var menu_num:Number = 4; //メニュー数 var maxlength:Number = 800*menu_num; //メニュー列の最大幅 var friction:Number = -0.02; //マウス移動時の摩擦値 //XMLオブジェクトの生成と外部XMLの読み込み var obj_xml:XML = new XML(); //XMLオブジェクトの生成 obj_xml.onLoad = start_me; //ロードアクション(コールバックを定義) obj_xml.ignoreWhite = true; //XMLファイルの空白、改行などを無視 obj_xml.load("scrollslide.xml"); //外部XMLファイルを読み込む //XMLのロード成功可否を判断 function start_me(success:Boolean):Void { if (success == true) { //読み込み成功 //サムネイルインスタンスの生成と設定 for (var i = 1; i<=menu_num; i++) { var menu_str:String = "menu"+i; obj_array[i] = _root.attachMovie("menu", menu_str, i); //インスタンスを設定 obj_array[i].num = i; //インスタンスを配列で管理 obj_array[i]._x = 800*(i-1); obj_array[i]._y = 0; //XMLからJPG名を読み込む var jpg_str:String = obj_xml.firstChild.childNodes[(i-1)*2].firstChild; //XMLからURLを読み込む var link_str:String = obj_xml.firstChild.childNodes[i*2-1].firstChild; obj_array[i].jpg_mc.loadMovie(jpg_str); //外部JPGロード obj_array[i].onEnterFrame = scrollphoto_me; //イベントアクション obj_array[i].onPress = press_me; //イベントアクション obj_array[i].onRollOver = roll_me; //イベントアクション obj_array[i].onRollOut = rollout_me; //イベントアクション obj_array[i].onRelease = release_me; //イベントアクション obj_array[i].link = link_str; } } else { seltext = "xml read error"; //エラー } } function release_me():Void { trace(this.link); getURL(this.link, "_parent"); //同ウインドウ内でURLを読み込む } //サムネイルインスタンスのフレームループ function scrollphoto_me():Void { var speed:Number = (_root._xmouse-center)*friction; //マウスの移動量 var vx:Number = this._x+speed; if (vx<=-800) { //ステージ左に消えたら vx += maxlength; //サムネイルの最後列の後ろへ移動 } else if (vx>=Stage.width+1) { //ステージ右に消えたら vx -= maxlength; //サムネイル最前列の前へ移動 } this._x = vx; updateAfterEvent(); } //サムネイルインスタンスのマウスロールオーバーアクション function roll_me():Void { this._alpha = 80; } //サムネイルインスタンスのマウスロールアウトアクション function rollout_me():Void { this._alpha = 100; } stop(); ■読み込んでいるXML <?xml version="1.0" encoding="utf-8"?> <jpeg> <jpegURL>images/image1.jpg</jpegURL> <link>http://yahoo.co.jp/1</link> <jpegURL>images/image2.jpg</jpegURL> <link>http://yahoo.co.jp/2</link> <jpegURL>images/image3.jpg</jpegURL> <link>http://yahoo.co.jp/3</link> <jpegURL>images/image4.jpg</jpegURL> <link>http://yahoo.co.jp/4</link> </jpeg> ■先人の皆様にご教授して頂きたい箇所 1.ループの変更   希望サイトのように、左から右に一定の速度で流れるようにしたい。   オンマウスにて完全にストップ。マウスアウトにてストップを解除。 2.ボタンの設置   メインタイムラインに新規フレームを作って左右のボタン  (left-botton right-botton)を設置し、MCに変換したのですが   早速問題で、読み込まれた外部JPGの背後になってしまっています。。   これを最前面に持ってきたいのです。   読み込む順番が問題なのでしょうか? 3.ボタンのアクション設定   左ボタン(left-botton)にて、左方向に加速。   右ボタン(right-botton)にて、右方向に加速。 何を無謀なチャレンジと思われるでしょうが、 宜しければご教授頂ければ幸いです。

  • 変数の利用方法

    変数の利用方法 皆様いつもお世話になっています。 毎回単純な質問ばかりして申し訳ないのですが、どうしてもエラーの原因が分からなくて投稿させて いただきました。 環境は CS3のAS3 です。 下記のソースでどうしても、ボタンにマウスオーバーしたときに、 【条件は未定義であり、プロパティがありません。】 とでます。 自分的には、gotoAndPlayのインスタンス名のしての仕方が悪いのかと思っているのですが、 複数のボタンで同じ処理をさせたいので、直接インスタンス名を指定しないで、変数で指定したいのですが。 本当に説明がへたくそでスイマセン。 宜しくお願いいたします。 ------------------------------------------------------------------- //マウスオーバー bot1.addEventListener(MouseEvent.MOUSE_OVER, handleRollOver(1)); function handleRollOver(bot:int){ return function (e:MouseEvent){ this["bot" + bot].gotoAndPlay("Over"); } } -------------------------------------------------------------------

    • ベストアンサー
    • Flash
  • 【AS3】ループ処理で関数名を作成するには?

    ActionScript3.0についてご教授ください。 forなどを使い、ループ処理を使って変数名を作成する要領で 関数名を作ることは可能なのでしょうか? やりたい処理を記述させて頂きますと次の通りです。 ステージにある3つのボタン「btn0」「btn1」「btn2」に対して マウスクリック時の処理を書こうとしている例文です。 もちろん、これではエラーになります。 for( var i:int; i<3; i++ ){   this["btn"+i].addEventListener( MouseEvent.MOUSE_DOWN,"on"+i );   function "on"+i( e:MouseEvent ):void{     trace( e.target.name );   } } こうした処理を実現したい場合、"on"+i 部分をどのように記述すると良いのでしょうか? もしご存知でしたらお知恵をいただけないでしょうか。 よろしくお願い致します。

    • ベストアンサー
    • Flash
  • actionscript クラスのメンバ変数のアクセスについて

    やりたいことは、 ムービークリップ(move_mc)をある座標まで、 減算処理をしながら移動するということなんですが、 クラスを勉強中で下記のように書いてみました。 ■インスタンス生成&メソッドへアクセス var move1:Move = new Move(5,100); move1.onclick(); ■asファイル class Move{ var speedPro:Number; var rangePro:Number; function Move(speed:Number,range:Number){ this.speedPro = speed; this.rangePro = range; trace(this.speedPro);//ここの値は5がでます } public function moving(){ _root.move_mc.onEnterFrame = function(){ this._x += (this.rangePro - this._x)/this.speedPro; trace(this._x); trace(rangePro);//undefined trace(this.speedPro);//undefined } } public function onclick(){ _root.move_mc.onRelease = moving; } } speedとrangeでスピードの値と移動範囲の値を引数で渡しています。 コンストラクタ関数のところでtraceするとちゃんと値はわたっていますが、moving関数のところではちゃんと値を取れていないようです。 メンバ変数にちゃんととりにいけていないようなのですが、 どのような書き方をしたらとりにいけるのでしょうか。。。 また、根本的にこのような書き方であっているのでしょうか。。。 ご協力お願いします。

    • ベストアンサー
    • Flash
  • 同じ名前の変数…

    数日前からPHPをはじめた者です。 クラス変数(という呼び方が適切かは??)と、その変数に値をセット/ゲットする関数を内包するクラスを作ってみたのですが、それに関してどうもピンと来ない部分があるので質問させてください。 以下がソースです。 class sample{ var $hensu; function set_hensu($str){ $hensu = $str; } function get_hensu(){ return $hensu; } } 上記クラスを使って値のセット/ゲットをしようとしたのですが、結果は×でした。 ファンクション内の変数を、thisで指定するとうまく行きました。 最初に指定した変数と、ファンクション内の変数を同一のものだと認識させるには、ファンクション内でのthis指定の他に方法は無いのでしょうか? もしくは、ファンクション内で書いた変数が新しい変数だと認識させない方法とか…。 無いなら諦めます。よろしくお願いします。 また、直接質問とは関係ないのですが、 どうしてPHPは変数名を書いただけで変数が作られてしまうのでしょう。メリットは何ですか? 分かりづらくて戸惑ってます。

    • ベストアンサー
    • PHP

専門家に質問してみよう