通过 Lua(iPhone SDK)访问对象。

我正在尝试理解Lua的工作原理,以及如何将其集成到项目中,比如基于Obj-C的iPhone游戏。我已经成功地集成了Lua的源代码,并成功使用简单的管理器类将在.lua文件中编写的函数调用转换为项目中的Obj-C方法。

现在我有点困惑,不确定如何使用Lua,通过Google了很多资料,也没有找到填补我理解上的小空白的文章。我想使用Lua为我的游戏脚本化简单的游戏逻辑;例如,我可能想检查玩家是否移动到了关卡的某一部分,然后我检查他是否拾取了一个物体,然后一旦他扔出那个物体我检查它是否击中了另一个物体,等等。

在脚本中,我想要这样的命令:

if (objectsAreTouching(level.objects["objIndex1"], level.objects["objIndex2"]))
{
   //Move to next win-condition.
}

所以我知道如何访问一个函数,比如上面所说的objectsAreTouching,但我无法看到如何从.lua文件中访问游戏主类之一中的Dictionary或Array。我假设这一点是可能的,我是对的吗?如果是这样,你如何做到这一点呢?如果可以,你可以在游戏引擎中有一个方法返回一个BOOL值将其传递给脚本,那么上面的if语句就会执行其中的代码吗?

我可能问得不好,请让我知道是否有必要澄清任何问题。此外,我知道围绕苹果禁止解释代码的问题,这对我的小项目没有关系。

感谢任何帮助!

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

点赞
stackoverflow用户33252
stackoverflow用户33252

你至少有三个选择:

  1. 在 Lua 的一侧创建字典(使用 Lua 的 table)和数组(也使用 Lua 的 table),而不是在 C++ 的一侧。你可以在 C++ 中使用 Lua 的 C API 实现这一点,或者在你加载的 Lua 脚本中构建游戏环境时实现。

  2. 提供访问函数给 Lua 以读取基于 C++ 的字典和数组。这些访问函数就像你描述的 objectsAreTouching 函数一样,但是在数据访问器级别上。通常从访问器返回的结果将是 lightuserdata

  3. 使用 Lua 的 userdata 对象来在 Lua 和 C++ 之间共享字典和数组的状态。在这种情况下,它们将是由 Lua 管理并需要访问器的 C++ 对象,就像 (2) 一样,但它们可以拥有方法(一个 metatable)和与之相关联的 environment

2010-08-22 19:49:44