• ベストアンサー

ムービークリップの名前に””(ダブルクオーテーション)は使えない?

Flashで1つのムービークリップを複製し、ムービークリップの名前に変数を挿入して使いたいのです。例えば、_root.namae1._xというソースがあれば「namae1」の「namae」の部分は固定して「1」の部分に3だったり10だったりといった数字を代入したいのです。これを行うには"namae"+iのように変数iを用意してここに毎回違う数字が入るようにすればいいのですが、問題がありました。 先ほどのソースであれば、_root."namae"+1._xのような具合になるわけですが、ムービークリップの名前にダブルクオーテーションを使っていることが悪いようで、エラーが発生してしまいます。しかしこれ以外に固定された名前と変動する変数を結合して一つの文字列にする方法は無いと思います。なんらかの形でダブルクーテーション記号は出てきてしまうはずです。 これの対処方法を教えてください。 よろしくお願いします。

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

  • ベストアンサー
  • DPE
  • ベストアンサー率85% (666/776)
回答No.2

ActionScript では、文字列を変数やインスタンスへの参照に変換することができます。 変換には eval 関数か配列演算子 [ ] を使いますが、eval 関数は Flash Player 6 からは制限が付きました(式の左辺で使うとエラーになる)ので、[ ] 演算子の方が応用が利きます。 例えば、ステージにムービークリップ namae1 ~ 5 があるとします。 for ループと [ ] 演算子を使って、これらの _x プロパティを「出力」パネルに trace アクションで表示するスクリプトは、 (↓各行頭に全角のスペースが入っています。コピーする際は、全て半角のスペースかタブに置き換えてください)  for( i = 1 ; i <= 5 ; i++ )  {   trace( _root[ "namae" + i ]._x );  } このようになります。 [ ] を使った変換では、階層1つ分の指定につき1組の [ ] を用意します。 例えば、先の namae1 ~ 5 が clip というムービークリップの中に入れ子になっている場合は、  for( i = 1 ; i <= 5 ; i++ )  {   trace( _root[ "clip" ][ "namae" + i ]._x );  } となります。  _root[ "clip.namae" + i ]._x は、エラーにはなりませんが、正しく参照できません。 なお、外側に出ている _root の代わりに、this や _parent といった相対表現を使うこともできます。 相対表現にする場合は、this や _parent が指す対象にご注意ください。

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

その他の回答 (1)

  • perse
  • ベストアンサー率74% (113/152)
回答No.1

hensu = "namae"; _root[hensu+1]._x = 300; で_root上にあるnamae1というMCのx座標が300になります。

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

関連するQ&A

  • ムービークリップ

    ムービークリップをクリックすることによって、 他のムービークリップの位置を変更できますか? もしくは他のムービークリップの複製はできますか? 今はクリックしたムービークリップ(自分自身)の 複製は出来ています。 on (release) { this.duplicateMovieClip("Photo_big", 0); _root.Photo_big._xscale = 80; _root.Photo_big._yscale = 80; _root.Photo_big._x = 350; _root.Photo_big._y = 200; } ちなみに移動したいムービークリップのインスタンス名は text1です。

    • ベストアンサー
    • Flash
  • ムービークリップのインスタンス名を変数で扱う

    Flash初心者で、レベルの低い質問だとは思いますが申し訳ありません。単純なシンタックスに関する質問です。 Panel.Panel0Cont ~ Panel.Panel10Cont という11個のムービークリップがあります。 それぞれのムービークリップを一挙に指定のフレームへgotoAndPlayさせる際に、ムービークリップの名前を変数で代入してforループで回したいのですが、変数への代入の仕方が解りません。例えば、 for (i=0; i>10; i++) { var mc:MovieClip = "Panel.Panel"+i+"Cont"; mc.gotoAndPlay(JumpNum); } mcはムービークリップですから、単純な文字列を代入しても当然タイプエラーになってしまいます。ムービークリップのインスタンス名のプロパティに、文字列を変数を使って代入するやり方があるのだと思います。 そのやり方をご教示頂けませんか。 ※参考書を2冊ひっくりかえしてもにわかには見つかりませんでした。

    • ベストアンサー
    • 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); } アドバイスをお願いします。

  • ムービークリップ内の変数について

    ムービークリップ内で扱った変数をルートで取り扱う時は _root.ムービークリップインスタンス名.変数名 このような形で取り扱うのでしょうか?。 また、ルートの1フレーム目のフレームアクションで変数を定義していた場合は、単に変数名だけで取り扱えるのでしょうか?。 宜しくお願い致します。

    • ベストアンサー
    • Flash
  • ムービークリップを削除したい

    FLASH 5 を使っています。 現在、duplicateMovieClip を使ってムービークリップを複製できるようにしています。 複製するMCの名前に連番を付けるようにして同じものを何個も複製できるようにしています。 別途、ゴミ箱を作り複製したMCをゴミ箱に乗せると削除できるようにしたいと考えています。 hitTest と removeMovieClip を使えば良さそうなのですがうまくいきません。 複製したMCが何個も出来るためゴミ箱基準だとMCの名前を指定できないので複製元のMCに onClipEvent (enterFrame) { if (this.hitTest( _root.gomi )) { this.removeMovieClip (); } } と書いてみたのですがダメでした。 なにぶん Actionscriptを始めたばかりで、良く分かりません。 お分かりの方、教えていただけますでしょうか? 宜しくお願い致します。

    • ベストアンサー
    • Flash
  • 変数とダブルクォーテーションの関係について

    $cookie1["$i"] = $col["$field["$i"]"]; 変数とダブルクォーテーションの記載方法ですが、 このソースで正常に動作させるには、”をどの様に記載すれば良いのでしょうか。 どうぞ宜しくお願い致します。

    • ベストアンサー
    • PHP
  • 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
  • ダブルクォーテーションで囲まないと表示できない変数

    ネットから拾ってきたサンプルソースをphp5.2.3を使って試行錯誤中です。 今回、メール受信のソースを試しており、 exitに変数を添えて変数の確認をしていたところ、 8行目は変数が表示できず、 9行目のようにダブルクォーテーションで囲むと表示できる といった変数がいくつかあることに気付きました。 10行目などの変数は、ダブルクォーテーションなしでも表示できますし、 print関数だと、ダブルクォーテーションのあるなしにかかわらず表示できています。 どのような変数でおこる現象なのか、知りたいと興味がわきました。 ご存知の方がいらっしゃいましたら、ご回答よろしくお願い致します。 ソース概略 (文頭の数字は行数,$host/$user/$passは事前に代入済) 01 $sock = fsockopen($host, 110, $err, $errno, 10) or die("サーバーに接続できません"); 02 $buf = fgets($sock, 512); 03 if(substr($buf, 0, 3) != '+OK') die($buf); 04 $buf = _sendcmd("USER $user"); 05 $buf = _sendcmd("PASS $pswd"); 06 $data = _sendcmd("STAT"); 07 sscanf($data, '+OK %d %d', $num, $size);   // 以下、必要なもの以外はコメントアウトして確認 08 exit($num);  //表示できない 09 exit("$num"); //表示できる 10 exit($host);  //表示できる 11 print($num);  //表示できる 12 print("$num"); //表示できる

    • ベストアンサー
    • PHP
  • ムービークリップを全て消去したい・・・

    タイトルどおりの悩みなのですが、attachMovieで複製したムービークリップを削除したいのですが、removeMovieClipでは一つずつしか消去が出来ず、プログラムがかさばってしまって大変見づらくなってしまいました。 教えて頂きたいのですが、たくさん作られたムービークリップを一括で削除する方法は無いでしょうか。(ありえないと思いますが、AllMovieClipDelete()みたいな・・・) for文で連続して消せばいいのかもしれませんが、一つ一つの名前がバラバラなので、それも出来ず、少し行き詰っています。 ご教示、よろしくお願いします。

    • ベストアンサー
    • Flash
  • 【ActionScript】ムービークリップ間の変数の受け渡しのやり方は?

    ムービークリップ間の変数の受け渡しがいまいちわかりません。 例えば、 ・_root.mc1 及び、 ・_root.mc1.mc2 というインスタンスがあった場合、 _root.mc1.mc2 のフレームに a = 100; と書き、 _root.mc1 のフレームに trace(_root.mc1.mc2.a); と書いても「undifined」と出るだけです。 (上層の値を下層で受けることはできるんですが、この例のように下層→上層の受け渡しはできないのです。) どうすればインスタンス間の変数の受け渡しができるのでしょうか。 よろしくお願いいたします。

    • ベストアンサー
    • Flash