【AS3】getChildByNameを使ってインスタンスを操作
今日作業中に結構大変だったのでメモ。
【追記 2010/5/13】以下の記事ですが、後で読み返してみて意味不明なので参考にしないで下さい。こちらの記事が参考になります。
外部からデータ(XML)を読み込んで、データの数だけ動的にインスタンスを生成した時、AS3では下記のように
インスタンスは操作できないみたいです。
for (var i = 0; i < XMLList.length; i++) {
var my_Mc:MovieClip = new MC();
container.addChild(my_Mc);
my_Mc.name = "my_Mc" + i;
my_Mc.addEventListener(MouseEvent.ROLL_OVER,rolled);
}
function rolled(e:MouseEvent):void {
for (var i = 0; i < XMLList.length; i++) {
if () {
e.currentTarget.x = 50;
} else {
container["my_Mc" + i].x = 0;
}
}
}
そこで、下記のようにgetChildByNameを使ってムービークリップにキャストします。
for (var i = 0; i < XMLList.length; i++) {
var my_Mc:MovieClip = new MC();
container.addChild(my_Mc);
my_Mc.name = "my_Mc" + i;
my_Mc.addEventListener(MouseEvent.ROLL_OVER,rolled);
var target_mc:MovieClip = container.getChildByName("myName");
}
function rolled(e:MouseEvent):void {
for (var i = 0; i < XMLList.length; i++) {
if () {
e.currentTarget.x = 50;
} else {
target_mc.x = 0;
}
}
}
これで操作可能になります。
ただこれだとcurrentTarget以外を操作したい場合に上手く指定できませんでした
なので下記のように設定することで解決しました。
var target_mc:MovieClip
for (var i = 0; i < XMLList.length; i++) {
var my_Mc:MovieClip = new MC();
container.addChild(my_Mc);
my_Mc.name = "my_Mc" + i;
my_Mc.addEventListener(MouseEvent.ROLL_OVER,rolled);
this[target_mc+i] = container.getChildByName("myName");
}
function rolled(e:MouseEvent):void {
for (var i = 0; i < XMLList.length; i++) {
if () {
e.currentTarget.x = 50;
} else {
this[target_mc + i].x = 0;
}
}
}
トラックバック(1)
このブログ記事を参照しているブログ一覧: 【AS3】getChildByNameを使ってインスタンスを操作
このブログ記事に対するトラックバックURL: http://alwaysfinetuning.com/mt/mt-tb.cgi/61
» [actionscript] Re: getChildByNameを使ってインスタンスを操作(ynakajimaの備忘録)~のトラックバック
getChildByNameを使ってインスタンスを操作へのコメントが書けなかったので、トラックバック。 こんなのどうでしょうか? もっとスマートにできそ... 続きを読む

