我可以在Corona中动态加载lua文件吗? (例如,从我的主游戏故事板文件中加载level23.lua)

时间:2013-01-02 23:54:35

标签: lua corona

是否可以动态加载lua文件?例如加载下一个级别?

背景: *有一个基于故事板的小游戏 *每个级别都会有不同的故事板文件,但动态/代码完全相同,所以我想我会动态地从单独的文件加载级别背景/对象。例如。我可以有level_1.lua,level_2.lua等。在这些文件中,他们可以创建(在lua中)他们的整套背景/交互对象等,并作为一个显示对象传回主游戏故事板文件 *使用“require level_1”工作正常,但现在试图让这种动态我可能遇到问题

如果不可能有任何建议吗?

3 个答案:

答案 0 :(得分:5)

require是一个带字符串的函数,仅此而已。不使用括号的事实只是语法糖,只有当字符串是常量时才适用。如果您将其作为普通函数运行,您可以使用字符串执行任何操作:

module = require( "level_"..level_number )

...或...

levels = { "castle", "castle2", "boss" }
module = require( levels[level_number] )

Etc等......

答案 1 :(得分:2)

如果loadfile()在电晕中不起作用,你可以使用require,因为它可以工作

e.g。

if level == 1 then
  game = require "level1"
else
  game = require "level2"
end

我相信您可以在任何地方使用,http://www.lua.org/pil/8.1.html

  

Lua提供了一个更高级的函数来加载和运行库,称为   要求。粗略地说,要求与dofile完成相同的工作,但有两个   重要的区别。首先,要求在路径中搜索文件;   第二,要求控制文件是否已经运行以避免   重复工作。由于这些功能,需要的是   Lua中用于加载库的首选函数。

答案 2 :(得分:2)

Corona SDK确实允许您在需要时需要模块,但这与在运行时动态加载模块不同。在构建时编译加载了require语句的东西。您以后不能下载.lua文件并将其包含在内。 Apple特别禁止这种行为。

但如果你的最终目标是遵循DRY原则(不要重复自己),并且拥有一组代码而不是重复一遍,如果你可以在一个真正的大桌子上它中的数据级别,或者您可以将每个人的数据保存到JSON格式的文本文件中,然后逐级读取它们。你不能拥有可执行代码或公式,但你可以拥有图像名称,x,Y坐标,物理属性等。