2012-02-02 41 views
1

我有一個普遍的問題,但我認爲如果我試圖過於具體,我只會讓它很混亂。所以基本上我想知道的是這樣的:如何在Corona SDK中使用表格

當你在Corona/Lua中創建一個表時,你可以在其中放入幾乎沒有數量的東西是正確的?

所以說,我創建的表中調用

rectangles = {}; 

,然後我放了一堆在它矩形的實例。如果我想一次更改所有矩形的屬性,我該怎麼做?

我理解它如何與項目表中的一組數字的工作,如:

for i = 1, 10 do 
     rectangles[i] = display.newImage("rectangle.png"); 

然後改變所有實例的圖像X位置,你就簡單的說

 rectangles[i].x = 20; 

但你會如何改變數組中所有項的屬性,而不知道有多少,因爲在你沒有給出一個上限,並且因爲表總是在增長?

+0

-1:缺乏研究。如何遍歷Lua中列表的所有元素是基本的東西,你可以在任何地方找到。無論它是否是Corona物品列表都沒關係;一個列表是一個列表。 – 2012-02-02 01:52:02

+0

你可能會考慮稍微調整一下你的問題,它可能會誤導別人讓你失望 – cctan 2012-02-02 10:23:13

回答

4

對於只有一種元素的數組,您可以使用#rectangles作爲元素數。

for i = 1, #rectangles do 
     rectangles[i] = display.newImage("rectangle.png"); 
end 

關於youtube例如,

如果添加元素爲rectangles這樣的:

rectangles[b]=b;

其實際作用是

rectangles["083DF6B0"]=b"

你看到當一個顯示對象b被用作一個鍵被轉換成十六進制字符串。

此外,你將需要使用pairs去在每個元素,因爲它們是
密鑰(例如array.length,array.width,array.weight ..)而不是索引(例如陣列[2], array [3] ..)

for key,value in pairs(rectangles) do 
    print(key); --prints 083DF6B0 
    print(value); --prints 20 
    rectangles[key]=30; 
end 
+0

我知道#rectangle意味着整個表的長度,但問題是我在這裏看這個教程: http: //www.youtube.com/watch?v=abfaLoUw0ss 並且在大約33:50他做了這個氣球[b] = b,我不明白,然後說你不能用這種方式#。但是,如果我嘗試使用氣球[b]調用表中的所有元素,例如更改所有元素的x值。 (氣球[b] .x = 10)。它不起作用 – 2012-02-02 03:25:35

+0

@Steve Patterson - youtube示例通過鍵與索引進行存儲。如果你也這樣做,你需要使用[pairs](http://www.lua.org/manual/5.1/manual.html#pdf-pairs)迭代表中的每個項目。 – 2012-02-02 03:55:49

+0

@Corbin March - 感謝您提供的信息,我必須承認,雖然Lua Reference有點混亂,因爲我是編程新手。因此,如果我試圖對此表中的所有項目執行transition.to(),那麼我會將第一個參數放在什麼位置? transition.to(我會在這裏放什麼?,{time,x,y}); – 2012-02-02 05:07:24

2

這取決於你如何在表中存儲項目。如果你通過索引存儲(如你的例子),你可以使用ipairs遍歷索引和值:

for index,value in ipairs(rectangles) do 
    value.x = 20 
    --or 
    rectangles[index].x = 20 
end 

如果你的密鑰(如存儲在YouTube視頻您在留言提),重複使用pairs

for key,value in pairs(rectangles) do 
    value.x = 20 
    --or 
    rectangles[key].x = 20 
end 

只是不存儲同時使用索引和鍵的項目,除非你知道會發生什麼。