通过Lua访问对象(iPhone SDK)

时间:2010-08-22 17:26:26

标签: iphone objective-c lua

我正在努力掌握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语句然后执行其中的代码吗?

我很可能会严重地提出这个问题,所以如果我需要澄清任何事情,请告诉我。另外,我知道Apple禁止解释代码的问题,这个小项目并不关心我。

感谢您的帮助!

1 个答案:

答案 0 :(得分:5)

你有(至少)三个选择:

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

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

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