プロが教えるわが家の防犯対策術!

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);
}

アドバイスをお願いします。

A 回答 (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
になりますが、前者は文字列で後者は参照になっています。

私の方法の中では最初にお伝えした方法が一番スリムだと思うのですが^^;
他のみなさんの方法をお待ちします。


不適切な表現の折をお許しください。
    • good
    • 0
この回答へのお礼

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

お礼日時:2003/09/25 23:15

こんにちは。



>>おそらく下のソースの例だと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;
}
    • good
    • 0
この回答へのお礼

早速の回答ありがとうございます。
なるほど、こういう書き方もあるのですね。
何分初心者なもので何を聞いても初耳です。

eval関数について手元のリファレンスで調べてみましたが
使い方が良く分かりませんでした。
実際はもっと複雑なソースなのでなるべく簡素化して表現したいと思っています。
もしよろしければこの例での使い方を教えていただけませんでしょうか?

お礼日時:2003/09/22 15:07

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!