AS2的迴圈



for (i=0; i<10; i++) {
this.attachMovie("test_mc", "test"+i, i, {_y:i*50});
var contain:MovieClip = this["test"+i];
trace("目前:"+i);
contain.onPress = function() {
trace(i);
};
}
這樣的語法似乎可行,但所有的test影片trace出來的結果都是10。
改用onEnterFrame後:
for (i=0; i<10; i++) {
this.attachMovie("test_mc", "test"+i, i, {_y:i*50});
var contain:MovieClip = this["test"+i];
trace("目前:"+i);
contain.onEnterFrame = function() {
trace(i);
delete this.onEnterFrame;
};
}
//trace
目前:0
目前:1
目前:2
目前:3
目前:4
目前:5
目前:6
目前:7
目前:8
目前:9
10
10
10
10
10
10
10
10
10
10
看來as2會先把迴圈執行完成後,才對MovieClip的事件方法下定義。
所以解決的方式必需為:
for (i=0; i<10; i++) {
this.attachMovie("test_mc", "test"+i, i, {_y:i*50});
var contain:MovieClip = this["test"+i];
trace("目前:"+i);
contain.i=i;
contain.onEnterFrame = function() {
trace(this)
trace(this.i);
delete this.onEnterFrame;
};
}
但有意思的是trace出來後的結果是
目前:0
目前:1
目前:2
目前:3
目前:4
目前:5
目前:6
目前:7
目前:8
目前:9
_level0.test9
9
_level0.test8
8
_level0.test7
7
_level0.test6
6
_level0.test5
5
_level0.test4
4
_level0.test3
3
_level0.test2
2
_level0.test1
1
_level0.test0
0
反過來行進了??
這雖是很久的問題了...雖都沒有妨礙到專案進行。
但如有高手能解釋一下邏輯上的流程,煩請指教一下。

留言

這個網誌中的熱門文章

Flash CS4有夠慢!