准备为自己的2D游戏动画系统选择一套给外部使用的接口方式,有如下几种选择:
1. 纯C API方式导出,类似于Windows API方式
优点:简洁,可以供C/C#乃至其他可以导入C DLL的语言使用
缺点:C++的系统转化为C会遇到很多性能以及架构的折损,对于对象控制类功能导出比较多的系统,这种方式简直是噩梦
2. C++方式导出,宏方式实现RTTI以及C++反射系统
优点:强大,易用。
缺点:对象生命周期不容易控制,反射系统设计比较费时,可能暴露很多类的细节,只能给C++使用
3. COM方式,类DirectX的接口方式
优点:商业项目已经证明这种接口方式的强大地方。无论是多个对象的类功能导出,还是COM接口重载都非常方便。而且,可以极为容易的让.NET访问。XBOX SDK里的XUI就是采用这种方式,而且还设计了一套C API搭配的强大C++反射系统,支持动态类创建,RTTI,动态类型转换等等。
缺点:需要系统注册,不能跨平台。COM标准学习起来需要时间
4. 脚本绑定
优点:保持你的系统对外C/C++接口的干净,简洁。通过脚本类绑定,可以很快的将C++功能注册到脚本中。
缺点:脚本如果没有调试器,将会让开发中碰到的棘手问题,甚至于在后期维护系统以及系统架构大变动变得异常复杂。脚本的性能决定了不能让其做实时处理,例如:渲染
最终选择下来,由于有自己的界面系统Motion使用lua的函数绑定的前例,因此还是决定选择一款脚本语言来做系统的对外接口,这里有几个选择:
1. Lua
可以说最好的游戏系统脚本语言。稳定,高效,bug几乎没有(即便有,普通开发者也是很难察觉的)。配上LuaPlus的强大C++绑定系统,你的系统开发效率可以提高很多。这里推荐notepad++来做lua开发,稍微配置下,弹出提示给你感觉在使用Visual Studio,:)
同时需要指出的是,lua的类功能确实比较弱。虽然可以用metatable方式来模拟。但逼近跟native class支持还差很远,实际开发中,你能体会出class中的权限控制(private,protected)有多么重要。
2. Python
诚然,这是个最OO的脚本。但是对于游戏,它太慢了。虽然本人只是用python写过一些build系统,但从很多朋友反应的情况来看,Python嵌入游戏系统,确实太慢。用Stackless Python? 用第三方开源产品,还是认准品牌,呵呵,这里如果有用过的同学,欢迎提供感受。
3. C#
语言和系统都很美,但是想嵌入游戏,还是很痛的。.net平台可惜就在于,到现在为止,可能还不是所有机器默认安装有.net平台。如果你的游戏是C++写成,但却要安装.net以便你的脚本能运行,这很奇怪吧?所以,如果要用C#,还不如不用脚本,全盘.net就好了。Managed DX? 那东西几年前就被MS打入冷宫了。XNA? 那东西只是一个玩具,别摸。
4.Squirrel松鼠脚本
这是个好东西。类lua的语法,C/C++/Java的语言结构,纯正的native class外加OO支持。拥有开源的C++类绑定系统。最爽的是,SQDEV支持日食(Eclipse)下的远程调试,开发环境还支持动态语法检查。oh,my god。还说不定哪天这脚本被MS招安,跟IronPython一样弄个.net绑定。