通过Lua访问对象(iPhone SDK)

deb*_*ebu 2 iphone lua objective-c

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

我现在有点陷入困境; 我不知道如何使用Lua来做什么,并且在谷歌上搜索了很多东西我没有找到一篇文章来填补我理解中的小差距.我想做的是使用Lua为游戏中的关卡编写简单的游戏逻辑; 例如,我可能想检查玩家是否已经移动到关卡的某个部分,然后一旦他这样做我检查他是否拿起一个对象,然后一旦他抛出该对象我检查它是否碰到另一个对象,等等等

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

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

所以我知道如何访问一个函数,例如上面提到的函数,objectsAreTouching但是我无法从.lua文件中看到如何从游戏的主类中访问一个字典或数组.我认为这一定是可能的,对吗?如果是这样,你怎么做?如果可以的话,你可以在你的游戏引擎中有一个方法,它返回一个BOOL传递,它返回值到脚本,以便上面的if语句然后执行它内的代码吗?

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

谢谢你的帮助!

Dou*_*rie 5

你有(至少)三个选择:

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

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

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