2015-02-07 85 views
0

如何在變量名的末尾放置一個int,該變量用於/ while循環中的每個變量。如何在AS3中生成變量名?

我想生成約40個不同的精靈變量,每個變量都有不同的數字。

有沒有這樣做的基本方法?

+1

你當然可以使用[arrays](http://www.adobe.com/devnet/actionscript/learning/as3-fundamentals/arrays.html),不是嗎?這是跟蹤許多對象的好方法,因爲它可以讓你在每個元素上進行操作(如果你需要的話),而不必命名所有40個變量(或誰知道很多)。 – Kroltan 2015-02-07 21:35:33

+0

是的,數字實際上是指數組中的行。 – FalconMitts 2015-02-07 21:45:16

回答

-1

這會做你的要求:

// on Flash's main timeline 
for(var i:int = 0; i < 40; i++){ 
    this["sprite" + i] = new Sprite(); 
} 

你想最終對sprite0sprite1sprite2 ... sprite39主時間軸性能。 (請注意,此代碼示例實際上並未添加小精靈,並且它不會爲其分配name,因此getChildByName("sprite0")將不起作用)。

但是,我應該對此進行一些說明。

首先,像這樣分配新屬性只適用於「動態」對象實例。 MovieClip是動態的,這就是將代碼放在主時間軸上並使用this應該有效的原因(因爲主時間軸是MovieClip,除非您另外指定文檔類)。通用ObjectsArrays也是動態的,因爲它們是通用數據容器。但是,AS3中幾乎沒有其他動態的,包括其他顯示對象類和您創建的任何類,unless you explicitly declare it as dynamic。例如,如果你試圖將財產分配給Sprite你會得到一個運行時錯誤:

var s:Sprite = new Sprite(); 
s["hello"] = "goodbye"; 

拋出:

ReferenceError: Error #1056: Cannot create property hello on flash.display.Sprite.

如果您嘗試訪問「你好」作爲屬性使用點語法,它甚至不會編譯:

var s:Sprite = new Sprite(); 
s.hello = "goodbye"; 

失敗並編譯:

1119: Access of possibly undefined property hello through a reference with static type flash.display:Sprite.

類的默認非動態(又名「密封」)行爲應該是一個指標,通常比在運行時爲顯示對象(以及其他隨機東西)分配新屬性更好。 MovieClips可能只是動態的,以適應由Flash建立的舊模式(這是我的猜測)。

所以你可以做的是使用Array

var sprites:Array = []; 
for(var i:int = 0; i < 40; i++){ 
    sprites.push(new Sprite()); 
} 

這段代碼會給你一個名爲sprites數組,它有40個指標,每個引用不同的精靈。 (同樣,這代碼沒有做任何與Sprites有用。)你可以通過索引像這樣一個精靈的引用:

var sprite:Sprite = sprites[0]; 
// do whatever you want with 'sprite' 

希望有所幫助。