【问题标题】:Access objects through Lua (iPhone SDK)通过 Lua (iPhone SDK) 访问对象
【发布时间】:2010-08-22 17:26:26
【问题描述】:

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

我现在有点卡住了;我不知道如何去做我想用 Lua 做的事情,并且在谷歌上搜索了很多,我还没有找到一篇文章来填补我理解中的小空白。我想做的是使用 Lua 为我的游戏中的关卡编写简单的游戏逻辑;例如,我可能想检查玩家是否已经移动到关卡的某个部分,然后一旦他这样做,我检查他是否捡起一个物体,然后一旦他扔掉那个物体,我检查它是否撞到另一个物体,等等等。

在脚本中,我想要这样的东西:

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

所以我知道如何访问一个函数,例如上面提到的函数objectsAreTouching,但我看不出我将如何从 .lua 文件中访问一个字典或数组游戏的主要课程。我认为这一定是可能的,对吗?如果是这样,你如何做到这一点?如果可以,那么您是否可以在游戏引擎中有一个方法,该方法将返回值的 BOOL 传递给脚本,以便上面的 if 语句随后执行其中的代码?

这个问题我可能问得不好,所以如果我需要澄清任何事情,请告诉我。另外,我知道苹果禁止解释代码的问题,我并不关心这个小项目。

感谢您的帮助!

【问题讨论】:

  • 查看 Ansca Corona SDK (coronasdk.com),也许您可​​以完全在 Lua 中构建您的游戏并为包括 iPhone 在内的多个平台构建游戏?我不是公司的一员,只是一个快乐的 Corona 开发人员。

标签: iphone objective-c lua


【解决方案1】:

你有(至少)三个选项:

  1. 在 Lua 端而不是在 C++ 端创建字典(使用 Lua table)和数组(也使用 Lua table);您可以使用 Lua 的 C API 在 C++ 中执行此操作,或者在您加载以构建游戏环境的 Lua 脚本中执行此操作。

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

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

【讨论】:

  • 很好的答案,除了问题是关于与 Objective-C 的接口,其中可能使用 NSArray 和 NSDictionary 之类的对象。没有办法将这样的对象交给 Lua,因为它不知道如何处理它。但这同样适用:您需要编写自己的访问器函数,Lua 可以使用这些函数来访问数组、字典或其他对象中的数据。
  • 非常感谢,一个很好的答案!虽然 Felixyz 是正确的,它不是特定于 Obj-C 的,但如果我可以通过 Lua 脚本访问数组和字典,那就行了; Lua 不需要对它们做任何事情,只要能够访问它们,我就可以将它们传递给函数。希望经过进一步阅读后,我会实现它。非常感谢!
猜你喜欢
  • 1970-01-01
  • 2010-09-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-22
  • 2011-05-12
  • 1970-01-01
  • 2017-05-28
相关资源
最近更新 更多