在objc和lua之间建立一个简单的桥梁?

Not*_*bad 16 iphone lua objective-c cocos2d-iphone ios

我已经将Lua与我的ObjC代码(iphone游戏)集成在一起.设置非常简单,但现在,我对桥接有一点问题.我搜索结果等等......似乎没有任何东西可以在没有修改的情况下工作.我的意思是,我已经检查了luaobjc桥(看起来相当古老和连续),我听说LuaCocoa但它似乎不适用于iPhone,蜡太厚了.

我的需求非常多,我只需要能够从lua调用objc方法,并且不介意做额外的工作以使其工作(我不需要一个完全自动的桥接系统).

所以,我决定自己建立一个小桥,基于这个页面http://anti-alias.me/?p=36.它有关于如何完成我需要的关键信息,但教程没有完成,我对从lua等调用时如何处理方法重载有一些疑问......

有人知道在iPhone上的objc和lua之间是否存在任何工作桥梁,或者是否可能很难完成上述网站提供的桥接?

任何信息都将受到欢迎.

Lea*_*s2D 38

不要重新发明轮子!

首先,你是对的,luaobjc和其他一些变种已经过时了.可以在LuaCocoa页面上找到一个很好的概述.LuaCocoa很好,但显然不支持iPhone开发,所以唯一的另一个选择是Wax.LuaCocoa和Wax都是运行时桥,这意味着您(理论上)可以以运行时性能为代价访问Lua中的每个Objective-C类和方法.

对于游戏而言,根据我的经验,运行时性能开销非常大,因此无法保证使用任何运行时绑定库.从一个人为什么会使用脚本语言的角度来看,两个库都无视通过低级语言支持脚本语言的目的:它们不提供DSL解决方案 - 这意味着你仍然要写出本质上是什么Objective-C代码,但语法略有不同,没有运行时调试支持,Xcode中没有代码编辑支持.换句话说:运行时Lua绑定充其量只是一个有问题的解决方案,并且有很多缺点.运行时Lua绑定特别适合于针对持续高帧率的快节奏动作游戏.

你想要的是一个静态绑定.静态绑定至少需要您声明Lua代码中可用的方法类型.某些绑定库会扫描您的头文件,其他库则需要您提供类似于头文件的特殊声明文件.大多数绑定库可以使用这两种方法.好处是最佳的运行时性能,并能够实际设计Lua脚本可以访问的类,方法和变量.

只有3个候选者将Lua代码绑定到iPhone应用程序.公平地说,还有更多,但大多数都有一个或多个关键缺陷,或者只是不稳定或仅用于特殊目的,或者根本不适用于iPhone应用程序.候选人是:

所有Lua静态绑定库共享的大缺点:它们都不能直接绑定到Objective-C代码.所有这些都需要有一个额外的C或C++层,最终可以与Objective-C代码连接.这与Objective-C作为一种语言的工作方式有关,以及在将Lua嵌入Objective-C应用程序时它(迄今为止)扮演的角色有多小.

我最近评估了所有三个绑定库并开始享受SWIG.它有很好的记录,但有一点学习曲线.但我相信学习曲线是有道理的,因为SWIG可以用来组合几乎所有的编程和脚本语言,知道如何将SWIG用于未来的项目可能是有利的.另外,一旦你理解了它们的定义文件实现,它就会变得非常容易(特别是与luabind相比)并且比tolua更灵活.