使用循环在Lua中调用多个函数。

我想在lua中调用多个非常相似的方法,除了他们的参数改变一个字符。我现在所做的方式有效,但极其低效。

function scene:createScene(event)

screenGroup = self.view

level1= display.newRoundedRect( 50, 110, 50, 50, 5 )
level1:setFillColor( 100,0,200 )
level2= display.newRoundedRect( 105, 110, 50, 50, 5 )
level2:setFillColor (100,200,0)
--依此类推

screenGroup:insert (level1)
screenGroup:insert (level2)
screenGroup:insert (level3)
screenGroup:insert (level4)

end

我计划将screenGroop:insert方法扩展到数百个级别,最多可能达到(level300)。正如您所看到的,我现在的做法是低效的。我尝试过这样做

for i=1, 4, 1 do
screenGroup:insert(level..i)
end

但我收到“期望表”的错误。

点赞
用户1442917
用户1442917

在这种情况下,最好使用表格:

local levels = {}
levels[1] = display.newRoundedRect(50, 110, 50, 50, 5)
levels[1]:setFillColor(100,0,200)
levels[2] = display.newRoundedRect(105, 110, 50, 50, 5)
levels[2]:setFillColor(100,200,0)
--如此类推

for _, level in ipairs(levels) do
  screenGroup:insert(level)
end

其他选择可以参考@EtanReisner的评论中的SO答案

2014-11-26 19:16:27
用户3998938
用户3998938

如果你的 'level' 表是全局的,这看起来是这样的,你可以使用 getfenv 索引它们。

for i = 1, number_of_levels do
    screenGroup:insert(getfenv()["level" .. i])
end

getfenv 返回环境,其中包含所有全局变量,以字典形式。因此,你可以像普通表一样索引它,例如 getfenv()["key"]

2014-11-27 18:55:23