如何在Corona SDK中使用表格

我有一个比较普遍的问题,但如果我试图过于具体,可能只会使问题变得更加困难。所以,我想知道的基本上是:

在Corona/Lua中创建一个表,你可以放置任意数量的东西,对吗?

比如我创建一个名为

   rectangles = {};

然后我把一堆矩形实例放到其中。如果我想要同时更改所有矩形的属性,该怎么做?

我知道当表中有一定数量的条目时该怎么做,比如:

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

然后,要更改所有图像的x位置,你只需要这样说

     rectangles[i].x = 20;

但是,如果你不知道表中有多少项,也无法给出上限,因为表总是在增长,那你要如何更改数组中所有项目的属性呢?

原文链接 https://stackoverflow.com/questions/9105971

点赞
stackoverflow用户909233
stackoverflow用户909233

针对只有一种元素的数组,可以使用 #rectangles 来计算元素数量。

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

关于 [youtube](http://www.youtube.com/watch?v=abfaLoUw0ss 中的例子,

如果你像这样向 rectangles 添加元素:

rectangles[b]=b;

实际上的操作是:

rectangles["083DF6B0"]=b"

你可以看到,当一个显示对象 b 被用作键时,它会转换成一个十六进制字符串。

此外,你需要使用 pairs 遍历每个元素,因为它们是键(例如:array.length,array.width,array.weight..)而不是索引 (例如:array[2],array[3]..)。

for key,value in pairs(rectangles) do
    print(key); --打印 083DF6B0
    print(value); --打印 20
    rectangles[key]=30;
end
2012-02-02 01:48:48
stackoverflow用户7625
stackoverflow用户7625

这取决于您如何在表格中存储项目。 如果您按索引存储(就像示例中一样),则可以使用ipairs对索引和值进行迭代:

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

如果您按键存储(就像您在评论中提到的 youtube 视频),则使用pairs进行迭代:

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

只是不要同时使用索引和键存储项目,除非您知道可以得到什么结果。

2012-02-02 03:53:31