2014-10-31 63 views
1

我在舞臺上有一堆實例名稱爲ball1 - ball200的movieclip。我希望我沒有創建一個數組,並手動將所有的實例名稱設置成陣列使用for循環將movieClip的實例名稱推送到數組中

ballArray = [ball1, ball2,ball3, etc]; 

我試圖通過讓for循環週期,每個實例名稱添加到我的數組像這樣:

function createTheArray():void{ 
    for(var i:int = 1; i < 20;i++){ 
     ballArray.push(ball + i); 
     trace(newArray[i]) 
    } 
} 

但我一直在找回未定義的數組索引。它也告訴我,我不知道「球」是什麼。你將如何使用實例名稱的一部分,並將其與循環的索引值結合使用。所以第一次通過你得到ball1作爲你的數組的第一個索引值?

回答

2

200個球拖出到時間線,並給他們實例名稱聽起來並不像很多的樂趣!

最好的選擇:

右擊球對象,並轉到屬性中,單擊「爲ActionScript導出」,並給它一個唯一的名稱。 (讓我們把它叫做MyBall在這個例子中)時間軸中的代碼

做到這一點:

var ballArray:Vector.<MyBall> = new Vector.<MyBall>(); 
    for(var i:int=0;i<200;i++){ 
     ballArray.push(new MyBall()); 
     addChild(ballArray(ballArray.length-1)); 
    } 

一個最好的選擇

,如果你所有的球都是在時間軸上已經,你仍然可以做從上面的步驟(導出爲actionScript並給它起一個名稱),但執行以下代碼:

var ballArray:Vector.<MyBall> = new Vector.<MyBall>(); 
var i:int = numChildren; 
while(i--){ 
    if(this.getChildAt(i) is MyBall) ballArray.push(this.getChildAt(i) as MyBall); 
} 

另一個選項

如果你的球都不盡相同庫對象,如果你把他們都在一個影片剪輯容器的唯一對象(比方說你給它的實例名稱ballContainer,你仍然可以使用此代碼所以你不必給他們實例名稱:

var ballArray:Vector.<DisplayObject> = new Vector.<DisplayObject>(); 
var i:int = ballContainer.numChildren; 
while(i--){ 
    ballArray.push(ballContainer.getChildAt(i)); 
} 
+0

如果你不知道,'VECTOR'是基本相同'Array'除了在陣列中的所有項目必須是指定種類項目 – BadFeelingAboutThis 2014-10-31 19:13:40

1

可以使用括號中的字符串來獲取對象的屬性。在你的情況下,你的對象被稱爲這個。所以你的球的語法是this["ball"+index]。 試試這個:由字符串

function createTheArray():void{ 

    for(var i:int = 1; i < 20; i++){ 
     ballArray.push(this["ball" + i]); 
    } 
    trace(ballArray); 
} 

引用屬性是不是一個真正的偉大實踐中,雖然。如果可以動態創建球,那將是一個更好的實現。您可以在時間軸上創建一個球形MovieClip,然後在屬性中選擇「對於ActionScript導出」。然後,您可以使用此代碼來實例化20米或更多的球:

//add 20 balls to stage 
var ballArray:Array = []; 
for(var i:int = 0; i < 20; i++){ 
    var ball:Ball = new Ball(); 
    addChild(ball); 
    ballArray.push(ball); 
} 
trace(ballArray); 
相關問題