通过Lua(iPhone SDK)访问对象

通过Lua(iPhone SDK)访问对象,iphone,objective-c,lua,Iphone,Objective C,Lua,我试图了解Lua是如何工作的,以及如何将它集成到一个项目中,比如基于Obj-C的iPhone游戏。我已经很好地集成了Lua的源代码,并设法使用一个简单的管理器类将.Lua文件中编写的函数调用转换为项目中的Obj-C方法 我现在有点困了;我不知道如何使用Lua,在Google上搜索了很多,我还没有找到一篇文章来填补我理解上的空白。我想做的是使用Lua为游戏中的关卡编写简单的游戏逻辑脚本;例如,我可能想检查玩家是否移动到了关卡的某个部分,然后一旦他移动到了关卡的某个部分,我会检查他是否捡起了一个物体

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

我现在有点困了;我不知道如何使用Lua,在Google上搜索了很多,我还没有找到一篇文章来填补我理解上的空白。我想做的是使用Lua为游戏中的关卡编写简单的游戏逻辑脚本;例如,我可能想检查玩家是否移动到了关卡的某个部分,然后一旦他移动到了关卡的某个部分,我会检查他是否捡起了一个物体,然后一旦他抛出了那个物体,我会检查它是否击中了另一个物体,等等

在脚本中,我希望有如下内容:

if (objectsAreTouching(level.objects["objIndex1"], level.objects["objIndex2"]))
{
   //Move to next win-condition.
}
所以我知道如何访问一个函数,例如上面提到的一个,objectsaretooching,但是我看不出如何从.lua文件中,从游戏的一个主要类中访问字典或数组。我想这一定是可能的,对吗?如果是,你是如何做到的?如果可以,那么在游戏引擎中是否可以有一个方法将返回值的BOOL pass返回给脚本,这样上面的If语句就可以执行其中的代码

我可能问得很糟糕,所以如果我需要澄清任何事情,请告诉我。另外,我知道苹果公司禁止解释代码的相关问题,这与我的这个小项目无关


谢谢你的帮助

您至少有三种选择:

使用LUA表和数组创建字典,也使用LUA侧的LUA表而不是C++侧;你可以在C++中使用Lua的C API,或者在你加载的Lua脚本中构建游戏环境。

提供访问函数到Lua,读取基于C++的字典和数组。这些访问函数与您描述的objectsAreTouching函数类似,但处于数据访问器级别。通常,从访问器返回的结果是lightuserdata

使用LuaUsDebug对象共享Lua和C++之间的字典和数组的状态。在这种情况下,它们将是需要访问者的C++对象,就像2,但将由Lua管理,并且可以有方法和元相关的环境。


找个时间看看Ansca Corona SDK,也许你可以完全用Lua构建你的游戏,并构建多个平台,包括iPhone?我不是该公司的一员,只是一个快乐的Corona开发者。回答得很好,但问题是关于与Objective-C接口的,在这里人们可能会使用像NSArray和NSDictionary这样的对象。没有办法把这样的东西交给Lua,因为它不知道该怎么处理。但同样的道理也适用:您需要编写自己的访问器函数,Lua可以使用这些函数访问数组、字典或其他对象中的数据。非常感谢,这是一个很好的答案!虽然Felixyz是对的,它不是特定于Obj-C的,但如果我可以通过Lua脚本访问数组和字典,我就可以了;Lua不需要对它们做任何事情,只要能够访问它们,我就可以将它们传递给函数。希望在进一步阅读之后,我能实现它。谢谢!