2012-02-02 42 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 

只是不存储同时使用索引和键的项目,除非你知道会发生什么。