2010-08-22 49 views
2

我试图去了解Lua如何工作,以及如何将它集成到项目中,如基于Obj-C的iPhone游戏。我已经将Lua的源代码整合得很好,并且设法使用一个简单的管理器类将翻译成.lua文件的函数调用转换为项目中的Obj-C方法。通过Lua访问对象(iPhone SDK)

我现在有点卡住了;我不知道如何去做我想用Lua来做什么,并且在Google上搜索了很多,我还没有找到一篇能够填补我理解中的小小空白的文章。我想要做的就是使用Lua在我的游戏中编写简单的游戏逻辑。例如,我可能想要检查玩家是否已经移动到关卡的某个部分,然后一旦他确认了他是否拿起了一个物体,那么一旦他抛出该物体,我会检查它是否碰到另一个物体等等。等

在脚本中,我想有这样的事情:

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

所以我知道如何访问功能,例如一个上面提到,objectsAreTouching,但我可以”看看我是如何从.lua文件中,从游戏的主要类之一中访问字典或数组的。我认为这一定是可能的,对吗?如果是这样,你如何做到这一点?如果可以的话,你可以在你的游戏引擎中有一个方法返回一个返回值给脚本的BOOL通道,这样if语句就可以执行它内部的代码了吗?

我可能很好地问过这个问题,所以如果我需要澄清任何事情让我知道。另外,我意识到围绕苹果禁止解释代码的问题,这个小小的项目并不关心我。

感谢您的帮助!

+1

有时候请查看Ansca Corona SDK(http://www.coronasdk.com),或许您可以完全在Lua中构建您的游戏并为包括iPhone在内的多个平台构建游戏?我不是公司的一员,只是一个快乐的电晕开发者。 – Trae 2010-08-24 09:39:36

回答

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++之间的字典和数组的状态。在这种情况下,它们将是需要访问器的C++对象,就像(2)一样,但是将由Lua管理,并且可能有与它们关联的方法(metatable)和environment

+1

伟大的答案,除了问题是关于与Objective-C接口,其中一个可能使用像NSArray和NSDictionary的对象。没有办法将这样的对象交给Lua,因为它不知道该如何处理它。但同样适用:您需要编写您自己的访问器函数,Lua可以使用它来访问数组,字典或其他对象中的数据。 – Felixyz 2010-08-25 08:32:46

+1

非常感谢,很好的回答!虽然Felixyz是正确的,它不是特定于Obj-C,如果我可以通过Lua脚本访问数组和字典,那会对我有用; Lua不需要对他们做任何事情,只要能够访问它们,我就可以将它们传递给函数。希望在进一步阅读之后,我会实施它。 非常感谢! – debu 2010-08-27 21:14:27