用于循环来调用lua中的多个函数

时间:2014-11-26 18:51:34

标签: for-loop lua corona lua-table scene

我想在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)
--and so on so forth

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

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

2 个答案:

答案 0 :(得分:3)

在这种情况下,最好的方法是使用表格:

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)
--and so on so forth

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

对于其他选择,请查看来自@ EtanReisner评论的SO answer

答案 1 :(得分:-1)

如果您的“级别”表格是全局的,可以使用getfenv对其进行索引。

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

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