【问题标题】:can I dynamically load a lua file within Corona? (e.g. load level23.lua, from within my main game storyboard file)我可以在 Corona 中动态加载 lua 文件吗? (例如,从我的主游戏故事板文件中加载 level23.lua)
【发布时间】:2013-01-02 23:54:34
【问题描述】:

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

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

如果不可能有什么建议?

【问题讨论】:

    标签: lua coronasdk


    【解决方案1】:

    require 是一个接受字符串的函数,仅此而已。您不使用括号的事实只是语法糖,仅适用于字符串为常量的情况。如果你把它作为一个普通函数运行,你可以对字符串做任何你想做的事情:

    module = require( "level_"..level_number )
    

    ...或...

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

    等等等等……

    【讨论】:

      【解决方案2】:

      如果 loadfile() 在 corona 中不起作用,你也许可以使用 require,因为它起作用了

      例如

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

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

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

      【讨论】:

        【解决方案3】:

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

        但是,如果您的最终目标是遵循 DRY 原则(不要重复自己),并且拥有一组代码而不是重复多次,如果您可以使用一个包含所有关卡数据的非常大的表或者您可以将每个人的数据保存到 JSON 格式的文本文件中,然后逐级读取它们。里面不能有可执行代码或公式,但可以有图像名称、x、Y 坐标、物理属性等。

        【讨论】:

        • 您能否添加关于 Apple 禁止这样做的参考?
        • :) 我认为,Corona 不希望人们知道 dofile 和 require 实际上是相同的模缓存和文件路径抽象。
        猜你喜欢
        • 2013-12-15
        • 2015-01-17
        • 1970-01-01
        • 2023-01-16
        • 2023-04-04
        • 2012-06-08
        • 2015-06-11
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多