战魂小筑

讨论群:309800774 知乎关注:http://zhihu.com/people/sunicdavy 开源项目:https://github.com/davyxu

   :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  257 随笔 :: 0 文章 :: 506 评论 :: 0 Trackbacks

     准备为自己的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绑定。

 

posted on 2009-12-31 11:42 战魂小筑 阅读(2180) 评论(2)  编辑 收藏 引用 所属分类: 脚本技术C++/ 编程语言

评论

# re: 为游戏系统选择一个接口方式 2009-12-31 17:03
都没有说最后的决定嘛。
  回复  更多评论
  

# re: 为游戏系统选择一个接口方式[未登录] 2010-01-06 09:05 christanxw
Python不慢,我们的已经运营的游戏项目就是用Python做的脚本,上层所有逻辑全部都是Python写的,不管是服务端还是客户端。
我个人还是更喜欢简洁的LUA。  回复  更多评论
  


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理