2011-05-28 27 views
0

我使用循環來創建電影剪輯的網格。剪輯存儲在數組tileArray中。
這裏是我的代碼:AS3:解決陣列中影片剪輯的問題!

//Spawn Checkers 
var i:int = new int(); 
var j:int = new int(); 
var tileArray:Array = new Array(); 
for (i=0; i<22; i++) 
{ 
    for (j=0; j<12; j++) 
    { 
     var tile:checker = new checker(i * 25 + 49,j * 25 + 40); 
     stage.addChild(tile); 
     tileArray.push(tile); 
    } 
} 
//Activate Checkers (TEST) 
var m:int = new int(); 
for (m=0; m<tileArray.length; m++) 
{ 
    tileArray[m].gotoAndPlay(1); 
} 

我的問題是在運行//Activate Checkers (TEST)代碼段時,它並沒有解決第0個元素。即在位置(49,40)創建的第一個圖塊。如果我這樣做tileArray[0].gotoAndPlay(1);它可以工作,但由於某種原因,for循環將會觸及每個拼貼塊,除了tileArray中的第一個checker對象。

E: 當使用trace(m);我可以看到m確實從0開始,但循環無法執行tileArray[0].gotoAndPlay(1)。此外,如果我將tileArray[0].gotoAndPlay(1);放在循環之外並註釋掉循環,則不會生成任何貼圖。 tileArray[0].gotoAndPlay(1);在循環外不起作用,但在裏面工作 - 除非數組索引是我的迭代變量。很奇怪。

+3

'new int()'''new Array()'?只是'var i:int'和'var tileArray:Array = []',它更短更快。 – alxx 2011-05-28 06:01:58

+0

@ alxx,根本不需要聲明'i'和'j'。但是如果你在'for'之前聲明'var i:int = 0',那麼所有的會更快一些 – Eugeny89 2011-05-28 08:37:54

+0

你的棋類是什麼?我假設你正在傳遞x,y位置 - 但我看不到該課程會發生什麼,這可能是問題的一部分。檢查器類也涉及庫動畫片段?如果是這樣,那個movieclip在它的時間軸上有沒有任何代碼?我使用自己的代碼和來自庫中的自己的檢查器符號,並且此代碼工作。所以我相信這個問題出現在檢查器類或庫中使用的符號內。我唯一的改變是在循環中創建實例後,用你的計算手動設置tile的x,y位置。 – prototypical 2011-05-29 00:40:09

回答

1

你可以簡化你的代碼了一下,它可以解決這個問題:當我通過整個陣列需要循環

//avoid the use of the **new** statement (it initialise a bunch of stuff you dont need) 
var i:int; 
var j:int; 
var tileArray:Array = []; 

for (i=0; i<22; i++) 
{ 
    for (j=0; j<12; j++) 
    { 
     //** updated ** I forgot to add the [i] for index position 
     tileArray[i] = new checker(i * 25 + 49,j * 25 + 40); 
     addChild(tileArray[i]); 
    } 
} 

//Activate Checkers (TEST) 
var m:int; 

for (m=0; m<tileArray.length; m++) 
{ 
    tileArray[m].gotoAndPlay(1); 
} 
+2

我會使用矢量。 而不是Array。 – roberkules 2011-05-28 10:39:37

+2

tileArray = ...,你的意思是tileArray.push?將tileArray.length存儲在局部變量中比直接在for循環中使用它要快。如何使用每個循環? – 2011-05-28 10:51:49

+0

@roberkules矢量內部使用陣列!使用Vectors的主要優點是它們自動增加容量,而數組的大小是固定的。在這種情況下,有一小部分固定數量的元素,並選擇使用數組在載體上更有意義,因爲數組具有更快的訪問速度(它們是基元函數),並且內存使用量最少。 – nelsond8 2011-05-28 10:54:02

1

,我一般用的/每個語法:

for each (var tile:checker in tileArray) { 
    tile.gotoAndPlay(1); 
} 

這並不能解釋你遇到的怪異行爲(我不知道,我會開始看「checker」類,但這是flailing),但它可能使它不相關。

+0

檢查器類擴展了影片剪輯,並且實際上只是一個構造函數,它具有兩個參數並將它們用作座標;我真的懷疑檢查類是問題。 – warpstack 2011-05-29 01:33:58