• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:FLASHでムービークリップ名を変数で持つ場合のloadmovie)

FLASHでムービークリップ名を変数で持つ場合のloadmovie

このQ&Aのポイント
  • FLASHMXで空ムービークリップを作成し、外部SWFを読み込むスクリプトを書いても、変数で指定すると何も表示されない問題が発生します。
  • 変数として定義したムービークリップ名が正常に認識されず、代わりにそのままの文字列として扱われているようです。
  • 解決策としては、変数を展開するためにムービークリップにはthisキーワードを使用するか、_rootオブジェクトを介してアクセスする方法があります。

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

  • ベストアンサー
  • noias
  • ベストアンサー率82% (23/28)
回答No.2

あらためまして。 eval関数を以下のように使用することによって文字列から参照へと変換できます。 part_mc=eval("a10"+i+"_mc"); _root.part_mc._x=i*10; またその他の方法として#1であるようにevalを用いずに直接 _root[part_mc]._x=i*10; とする事も出来ます。 これら二つはこの例ではまったく同じ意味ですが 今回問題になるのは cerateEmptyMovieClipの第1引数は参照ではなく文字列が必要であり、それが配置される場所は文字列ではなく参照でなければなりません。 少しややこしくなってしまいましたが、 はじめにevalを使用してしまうと後のcerateEmptyMovieClipの引数になり得ないので、問題が生じます。 総じてこんな感じだとよいのでは。 for (i=0; i<10; i++) { part_mc = "a10"+i+"_mc"; loadfile = "a"+i+".swf"; _root.createEmptyMovieClip(part_mc, 100+i); _root[part_mc].loadMovie(loadfile); _root[part_mc]._x = i*10; } evalを使うのならこんな感じでしょうか。 for (i=0; i<10; i++) { part_mc = "a10"+i+"_mc"; loadfile = "a"+i+".swf"; _root.createEmptyMovieClip(part_mc, 100+i); part_mc = eval(part_mc); _root.part_mc.loadMovie(loadfile); _root.part_mc._x = i*10; } 前者、後者とも最終的にpart_mcの中身は a109_mc になりますが、前者は文字列で後者は参照になっています。 私の方法の中では最初にお伝えした方法が一番スリムだと思うのですが^^; 他のみなさんの方法をお待ちします。 不適切な表現の折をお許しください。

sweetbitter
質問者

お礼

丁寧な回答をどうもありがとうございます。 本当に助かりました。

その他の回答 (1)

  • noias
  • ベストアンサー率82% (23/28)
回答No.1

こんにちは。 >>おそらく下のソースの例だとpart_mcは変数名なのに そのままムービークリップ名と捕らえられてしまっているようです。 逆の発想ではないかと。^^; 変数の中に格納された文字列がムービークリップとして参照されていないため、その文字列を参照として解釈させなければなりません。 一般的にはeval関数を使用し、文字列を参照に変換しますが、(詳しくは付属のリファレンスで。)、今回のように値を局所変数にするのであれば、変数を使用せずに下記のようにもできますよ。 for (i = 0; i<10; i++) { _root.createEmptyMovieClip("part"+i+"_mc", 100+i); _root["part"+i+"_mc"].loadMovie("a"+i+".swf"); _root["part"+i+"_mc"]._x = i*10; }

sweetbitter
質問者

お礼

早速の回答ありがとうございます。 なるほど、こういう書き方もあるのですね。 何分初心者なもので何を聞いても初耳です。 eval関数について手元のリファレンスで調べてみましたが 使い方が良く分かりませんでした。 実際はもっと複雑なソースなのでなるべく簡素化して表現したいと思っています。 もしよろしければこの例での使い方を教えていただけませんでしょうか?