MovieClip間での変数受け渡しとは?

このQ&Aのポイント
  • FlashMX初心者がMovieClip間で変数の受け渡しに詰まっています。質問文章のソースコードも載せています。
  • MovieClipを複製して変数を渡し、反応を変える処理を作りたいが、変数の受け渡しで詰まっています。
  • MovieClip間で変数をやり取りする方法を教えてください。お願いします。
回答を見る
  • ベストアンサー

MovieClip間で、変数の受け渡し。

最近、FlashMXを初めまして、ActionScriptを利用してのゲーム作りにチャレンジしています。 duplicateMovieClip関数を使って、MovieClipを複製し、なおかつそれぞれに変数を渡し、その変数によってMovieClipの反応を変える。 という流れの処理を作ろうとしました。 が、それぞれのMovieClipに変数を受け渡すところで、詰まってしまいました。 MovieClip間で変数をやり取りするには、どうしたら良いでしょうか? 誰か教えてください。お願いします。 参考にならないかもしれませんが一応、問題部分のソースを載せます。 var i = _root.ItemList.length + 1; while (--i) {   root.ItemNum++;   var s = "Items"+_root.ItemNum;   duplicateMovieClip(Items,s,_root.ItemNum);   setProperty (s, _x, 50*i-20);   setProperty (s, _y, 30);   // ここでsに変数を受け渡したい。 }

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

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

  • ベストアンサー
  • HapHands
  • ベストアンサー率73% (19/26)
回答No.1

ややご質問の意図がわかりにくいのですが...。 推測するに、whileループ内でsがMovieClipでなく文字列であるため s.theVar = "値"; のような指定ができない、ということでしょうか。 であれば以下のような形で可能です。 eval(s).theVar = "値"; ですが、個人的に好みなのは以下のような書式です。バージョン4以前の「アクション」の書式からバージョン5以降の「ActionScript」の書式に変更しています。 ---- while (--i) { _root.ItemNum++; var s = "Items"+_root.ItemNum; var the_mc = Items.duplicateMovieClip(s, _root.ItemNum); the_mc._x = 50*i-20; the_mc._y = 30; the_mc.theVar = "値"; } ---- 回答がご質問の意図とずれているようでしたら補足をお書きください。

c-time
質問者

お礼

回答ありがとうございます! そうです!!そういうことです!!!! というか、そういうことだったんですか!! sがMovieClipでなく文字列であるため 出来なかったんですね(--; そこにさえ気付いていませんでした(汗) 分かりにくい質問をしてしまったにもかかわらず、分かりやすくかつ、的確な回答をしてくださって、本当にありがとうございました。助かりました。 もっと基礎学習頑張りますm(_ _)m

関連するQ&A

  • (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
  • AS3:ルートの変数とムービークリップ内の変数について

    AS3:ルートの変数とムービークリップ内の変数について ルートのタイムラインで設定した変数var RootVarがあるとして、これをあるムービークリップMCからMovieClip(root).RootVarで読み取って、MC内で何か処理をしたときMovieClip(root).RootVar++;とやってもルートのRootVarの値は変わりません。 例えば、 ■ルートのタイムライン1フレームに記述 var RootVar:uint; if(RootVar>=3){ trace("できた!!"); } ■ステージにあるムービークリップMCのタイムライン1フレームに記述 MovieClip(root).RootVar=0; var AddTimer:Timer = new Timer(1000,3); AddTimer.addEventListener(TimerEvent.TIMER,AddNum); AddTimer.start(); function AddNum(eventObject:TimerEvent):void { MovieClip(root).RootVar++; } ルートからムービークリップ、ムービークリップからルートへ変数に値を渡したり受け取ったりはできなのでしょうか? 変数の扱い方が問題なのでしょうか?よろしくお願いします。 環境:AS3、Flash CS4

    • ベストアンサー
    • 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
  • Flash/オブジェクトの指定のしかた

    いつもお世話になっております。 FlashでActionScriptを使って、 異なるオブジェクトを、同じメソッドで 連続的に処理する仕方について質問です。 やりたいこと・・************************* オブジェクトをいくつか複製して、 Resetボタンをクリックすると、 複製したオブジェクトが全てきえる、 というスクリプトを組みたいと考えています。 ************************************** 具体的には以下のように、 duplicateMovieClip()でオブジェクトを複製します。 次に、resetボタン(ボタンオブジェクト)に、 removeMovieClip()メソッドで複製したオブジェクトを 削除します。 メソッドは以下のようにしています。 一気にすべてを消したいために、 For文でremoveMovieClip()メソッドを 実行しようとしています。 removeMovieClip()メソッドを実行させる、 オブジェクトの指定に、 変数を使おうとしましたが、 とれませんでした。(以下参照) function removePoint() {  i = 1;  for (i = 1; i < pointFlg+1; i++){   RemoveObj = "newMc" + i;   _root.RemoveObj.removeMovieClip();  } } 異なるオブジェクトでメソッドを、一気に実行させる、 よい方法はご存知ないでしょうか? サンプル*********************************** function DuplicatePoint(){  pointFlg ++;  var newMcName = "newMc" + pointFlg;  var newLevel = pointFlg;  this.duplicateMovieClip(newMcName, newLevel);  _root.cursol.swapDepths(999);  _parent[newMcName]._x = _parent._xmouse;  _parent[newMcName]._y =_parent._ymouse; } function removePoint() {  i = 1;  for (i = 1; i < pointFlg+1; i++){   RemoveObj = "newMc" + i;   _root.RemoveObj.removeMovieClip();  } }

  • duplicateMovieClipしたMCをSharedObjectで保存、読み込みたい

    【やりたいこと】 duplicateMovieClipで何個も複製したムービークリップをSharedObjectで保存し(て読み込み)たい。 【わからないこと】 ユーザーが何個複製するかわからないものをi変数でカウントして それをSharedObjectで保存しようとしているが、 ユーザーが何個複製するかわからないMCに対する 一括命令文?がうまく書けない。 【現状】 まず、MC_printというMCの中にisuというMCがあります。 そのisuの上に空ボタンを置いて、以下のような スクリプトを書きました。 on (press) { _root.MC_print.isu.duplicateMovieClip("isu"+i, i++); //isuというMCをクリックするたびに複製していく _root.MC_print["isu"+i]._x = 500; //重なるので移動させてる } そして、保存ボタンに on (press) { _root.Save_Point(); } と書いていて、 SharedObjectインスタンスの生成は mySharedObject = SharedObject.getLocal("xypoint","/"); としています。 そして肝心のfunction命令文を function Save_Point() { mySharedObject.data["isu"+i._x] = _root.MC_print["isu"+i]._x; mySharedObject.data["isu"+i._y]= _root.MC_print["isu"+i]._y; } としています。 が、動きません。 理由は自分でもなんとなくわかるのですが、 複製されたMCが何個複製されたかわからない。 iの変数がちゃんと共有されてないんじゃないかと思っています。 が、_global変数にしても「isu1」「isu2」という風に インスタンス名を_nameで調べてテキストボックスで確認しても 複製はされてるが、このfunction命令文だとそのインスタンス名毎に (全てに)命令されてないってことですよね・・・。 for文とかを使うんでしょうか。でも何個複製されるか わからないし・・・。よくわかりません・・・。 環境はWindowsXP、FlashMXです。 MX以前の時代から突然またフラッシュを触り始めたので 新しいスクリプトなどはまったくわかりません。 なにかヒントでもいただければ幸いです。どうぞよろしくお願いいたします。

  • MovieClip(root)について

    ActionScript3.0で、ルートタイムラインにある変数の代入処理を、他の階層(ムービークリップなど)から命令する場合、 私は MovieClip(root).hoge = MovieClip(root).fuga; と書きますが、 MovieClip(root)を1回しか書かずに済ませる書き方は、ありませんでしょうか? ※その都度書くのは、あまり効率が良くないと思ったので。  たとえば、FlashLite1.1では、  tellTarget("/"){   hoge = fuga;  }  と書けて、効率が良いのですが、、、 よろしくお願いします。

    • ベストアンサー
    • Flash
  • FLASHでムービークリップ名を変数で持つ場合のloadmovie

    FLASHMXで空ムービークリップを作成して その中に外部SWFを読み込むスクリプトを書いています。 外部ファイルはa0.swfからa10.swfまであるのでそれを全て読み込む為に 空ムービークリップ名を変数で持ちたいのですが loadmvieの行では変数と認識してくれないようで何も表示されません。 (traceの行の2つの変数は正常に表示されますし  直接ムービークリップ名を入れれば読込もできます) おそらく下のソースの例だとpart_mcは変数名なのに そのままムービークリップ名と捕らえられてしまっているようです。 どのようにすれば変数と認識してくれるのでしょう? for (var i = 0; i<10; i++) { var part_mc = "a10" + i + "_mc"; var loadfile = "a" + i + ".swf"; _root.createEmptyMovieClip(part_mc, 100+i); _root.part_mc.loadMovie(loadfile); _root.part_mc._x = i * 10; trace(loadfile); trace(part_mc); } アドバイスをお願いします。

  • Flash 配列

    Flashでcsvファイルを読み込みんでいます。 ▼csvファイル中身 a,あんぱん,100(改行) b,食パン,180(改行) c,カリーパン,120(改行) ▼AS --------------------------------------------------------- var abc = new LoadVars(); var itemlist:Array = new Array(); abc.onData = function(data) { itemlist = data.split("\r\n"); if (itemlist[itemlist.length-1].length == 0) { itemlist.pop(); } for (var i:Number = 0; i<itemlist.length; i++) { itemlist[i] = itemlist[i].split(","); } } abc.load("book1.csv"); --------------------------------------------------------- 上記のASで読み込んだcsvファイルのデータを解析しています。 trace(itemlist[1][1]) で「食パン」を取り出したり出来ています。 ここで、 あんぱん,食パン,カリーパン と、3つの要素を持つ配列を作りたいのですが、 どうすればよいのでしょうか? pushやsliceを使用したのですが無知な為うまくいきませんでした (T_T;)

  • for & duplicateMovieClip & function

    for & duplicateMovieClip & function // == info用テキスト作成 ==================== /**/ var H_TextFieldInfo = _root.createTextField("I_textField",1001 ,10 ,10 ,690 ,20); _root.H_TextFieldInfo.text = ""; // 文字列を表示 テキスト表示テスト // == データ読み込み ============================== for(Hi=2; Hi<=10; Hi++){ H_name01 = "I_MC"+ Hi; H_gFX = I_MC01._width * Hi; H_gFY = 10; // ************ _root.I_MC01.duplicateMovieClip (H_name01, (201+Hi), {_x:H_gFX ,_y:H_gFY }); H_num = Hi; _root[H_name01].onRelease = function(){ _root.H_TextFieldInfo.text = H_num; } // ************ } ステージ上に I_MC01 というインスタンス名でムービークリップを配置して、上記のようなアクションスクリプトを書きました。for分の_root.I_MC01.duplicateMovieClip でI_MC01を複製し、その複製したムービークリップをクリックすると、テキストに番号が入力されるようにしたつもりなのですが、出来ませんでした。 いくつか思いつくことをやってみたのですが、出来ませんでした。 このようなときムービークリップをクリックすると、個別の番号をテキスト欄に表示させるにはどうしたらよいのでしょうか? ご教授よろしくお願いします。

    • ベストアンサー
    • Flash
  • 変数名を分割したり結合する方法

    環境:actionscript 3.0 str_ という変数名があるとします。 例えばこれを、 str_iの様に、 iがvar i :int として設定したいのですが、 正しく変数名として認識させるためには、 どの様に記載すれば良いのでしょうか? また、この様な方法は可能でしょうか? ちなみに、 PHPでは、$$str_と出来るのですが、actionscript 3.0 で この様な記載方法に似た方法での実現できないのでしょうか。 ご存知の方がいらっしゃいましたら、ご教授頂けると幸いです。

    • ベストアンサー
    • Flash

専門家に質問してみよう