作者kirai (囧RZ)
看板Flash
標題[問題] 使用迴圈加入變數
時間Sun Nov 18 07:52:52 2012
假設現在有icon1, icon2, ...這些MC
(存放在元件庫裡)
而我想為每個icon都建立一個連結
ex:icon1的連結叫Icon1
再宣告變數
var icon1:MovieClip=new Icon1();
有辦法直接一次用迴圈處理完畢嗎?
p.s 試過 var this['icon'+i]=new this['Icon'+i];
這個寫法似乎不行...
謝謝
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 61.64.141.156
1F:推 cjcat2266:this["icon"+1] = new getDefinitionByName("icon"+i); 11/19 00:37
請問cj 為什麼用 getDefinitionByName 這個指令就可以了呢?
謝謝
※ 編輯: kirai 來自: 61.64.142.146 (11/19 09:19)
2F:推 cjcat2266:getDefinitionByName是AS3內建reflection函式 11/20 02:52
3F:→ cjcat2266:然後new this本身就是非法語法,其實沒什麼為什麼... 11/20 02:53
4F:推 cjcat2266:咧,我說錯了, new this["something"]可以是合法的 11/20 06:42
5F:→ cjcat2266:只要this["something"]是一個正確的Class物件參考就OK 11/20 06:42
6F:→ cjcat2266:var this[...這部分才是非法,因為var後面不能接this 11/20 06:43
7F:→ kirai:那用this["icon"+1] = new getDefinitionByName("icon"+i) 11/20 23:39
那用this["icon"+1] = new getDefinitionByName("icon"+i)
這個語法是直接宣告出iconi這個變數
但就語意來看, 沒有指定他的類別耶
這樣宣告出的變數不是無法確定類別嗎?
不好意思問題這麼多....
※ 編輯: kirai 來自: 61.64.86.103 (11/20 23:42)
8F:→ sayaku0210:記得沒指定預設是Object 11/21 07:45
9F:推 cjcat2266:用迴圈宣告變數只能用這個dynamic variable語法 11/21 10:22
10F:→ cjcat2266:缺點就是沒有compile-time type check支援 11/21 10:22
11F:→ cjcat2266:真的要type-safe的話,就用Vector.<Type>吧 11/21 10:23
12F:→ cjcat2266:var v:Vector.<Type> = new Vector.<Type>(); 11/21 10:23
13F:→ cjcat2266:v[i] = new Type(); 這樣 11/21 10:24
14F:→ cjcat2266:其實這樣效能也比較好,因為dynamic variable存取是使用 11/21 10:25
15F:→ cjcat2266:map,而Vector使用的是陣列 11/21 10:25
16F:→ kirai:謝謝解答 11/21 11:27
剛試了一下
TypeError: Error #1064:
無法將方法 global/flash.utils::getDefinitionByName()當作建構函式呼叫。
冏
※ 編輯: kirai 來自: 61.64.140.40 (11/21 17:39)
17F:推 silase0201:var v:Vector.<Class> = new Vector.<Class>() 11/21 21:05
18F:→ silase0201:v.push(getDefinitionByName("icon"+(i++))) 11/21 21:05
19F:→ silase0201:trace(v) 11/21 21:05
20F:→ kirai:也就是一定要先建立一個向量 or陣列來存放new出來的物件? 11/21 23:47