■2014/11/29追記■
◇文字列から関数を呼び出す
◇動的に作成したムービークリップにアクセスする。※2014/11/29追記
◇root、parentなどの書き方
■■■■■■■■■■■■■■■■■■■■※随時追記
2013/11/17
■関数を文字列から呼び出す。
AS2ではevalを使って関数を呼び出すことが出来ました。
AS3に移行した場合はどうすれば良いのでしょうか。
文字列と変数を組み合わせて、自作関数を呼び出す方法です。
基本は
this["関数名"+変数]();
で呼び出すことが出来ます。
また、ムービークリップなどから階層を指定して
関数を呼び出す場合は
parent["関数名"+変数]();
root["関数名"+変数]();
と記述すれば可能です。
前の部分にある
thisやparent、rootは必須です。
□サンプル
function Test1() {
trace("test1");
}
function Test2() {
trace("test2");
}
function Test3() {
trace("test3");
}
function Test5_2() {
trace("Test5_2");
}
Test1();
var num:Number=2;
this["Test"+num]();
num=3;
this["Test"+num]();
num=5;
var num2:Number=2
this["Test"+num+"_"+num2]();
2013/11/17
■関数を文字列から呼び出す。
AS2ではevalを使って関数を呼び出すことが出来ました。
AS3に移行した場合はどうすれば良いのでしょうか。
文字列と変数を組み合わせて、自作関数を呼び出す方法です。
基本は
this["関数名"+変数]();
で呼び出すことが出来ます。
また、ムービークリップなどから階層を指定して
関数を呼び出す場合は
parent["関数名"+変数]();
root["関数名"+変数]();
と記述すれば可能です。
前の部分にある
thisやparent、rootは必須です。
□サンプル
function Test1() {
trace("test1");
}
function Test2() {
trace("test2");
}
function Test3() {
trace("test3");
}
function Test5_2() {
trace("Test5_2");
}
Test1();
var num:Number=2;
this["Test"+num]();
num=3;
this["Test"+num]();
num=5;
var num2:Number=2
this["Test"+num+"_"+num2]();
【親の親の関数を指定する場合】
parent.parent["Test"+num+"_"+num2]();
parent.parent["Test"+num+"_"+num2]();
MovieClip(parent.parent)["Test"+num+"_"+num2]();
※直前のオブジェクトを指定するドットを付けないというところに注意が必要です。また
parent.parent.Test[2]]();
などの配列を指定する様な書き方もエラーになります。
//実行結果
//test1
//test2
//test3
//Test5_2
━━━━━━━━━━━━━━━━━━━━
<a name="mc_call"></a>
2013/11/13
■動的に作成(生成)したムービークリップ内の
ムービークリップなどを参照する場合の注意。
addChildで生成したムービークリップをnameを使用して
その中のムービークリップにアクセスしようと思ったら
できなくて、かなりの時間つまずいたので記録。
あらかじめ、作成するムービークリップには
ちゃんと「ムービークリップ.name」を指定しておく。
var mc:MovieClip=new hoge_mov();
mc.name="hoge1";
上記のムービークリップ内の「child_mov」にアクセスする場合、
hoge1.child_mov〜でアクセスできるかと思いきや、
これが不可能だった。
結果:「getChildByName」を使用してアクセス(参照)させる。
もしくはMovieClip型の変数を保持しておいて、そこからアクセスする。
(やることは同じです)
どういうことかというと、「hoge1」というnameをMovieClip型に変換して
アクセスするということになります。
var name_str:String="hoge1";
var mc:MovieClip = MovieClip(getChildByName(name_str));
mc.child_mov〜
という形になります。
この形式を覚えておけば、MovieClip型で変数を保持し続けなくても
参照する必要がある場合にのみ、上記の方法を使えば
参照可能です。(要name指定)
nameを指定しない場合、インスタンス名が毎回変わるなど、
挙動が安定しないこともあるので、nameはしっかりと指定するのが
良いようです。
for文などで同じムービークリップを作成する場合など
nameは必ず指定しましょう。
━━━━━━━━━━━━━━━━━━━━
<a name="path_call"></a>
2013/10/11
■_rootの書き方。(パス指定)
AS2.0−_root
AS3.0−MovieClip(root) もしくは
var rootmc:MovieClip = root as MovieClip
後者のような書き方だと、階層が変わったりした場合には
結局MovieClip(root)やMovieClip(parent)などと
記述しないといけないため、
私は前者「MovieClip(root)」のような書き方で
統一することにしました。