为游戏系统选择一个接口方式---转载
2010-01-22 15:02
387 查看
准备为自己的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绑定。
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绑定。
相关文章推荐
- 为游戏系统选择一个接口方式--转载
- LSTM模型在问答系统中的应用 2017-06-27 21:03 在问答系统的应用中,用户输入一个问题,系统需要根据问题去寻找最合适的答案。 1:采用句子相似度的方式。根据问题的字面相似度选择相似度最
- 建议把.CSV的默认打开方式改成任意一个文本 编辑器,系统自带的记事本就是个不错的选择
- 暴雪,你为何选择了网易?一个不合格的游戏运营者
- python (5分钟实现一个游戏的屏蔽敏感字系统,)
- 记录一个用httpClient的方式访问接口的例子
- Android 4.4从图库选择图片并裁剪,由于系统版本不同导致Uri的bug的简单解决方式
- 再谈网游同步技术:实时动作游戏同步方式和传输协议选择
- 通过调用C语言的库函数与在C代码中使用内联汇编两种方式来使用同一个系统调用来分析系统调用的工作机制
- 转载《WEB调用系统颜色选择对话框》
- 使用库函数API和C代码中嵌入汇编代码两种方式使用同一个系统调用
- 创建线程的第二种方式:实现一个接口Runnable。
- mentohust联网报错“系统提示:用户使用了不允许的接入方式!(有线网络请选择“有线1x上网”服务)”
- 实验四——使用库函数API和C代码中嵌入汇编代码两种方式使用同一个系统调用
- 【转载】Java Map遍历方式的选择
- 【Java】【反射】 使用反射方式去实现一个接口
- 使用库函数API和C代码中嵌入汇编代码两种方式使用同一个系统调用
- 用户与操作系统的接口是什么?一个分时系统提供什么接口?一个批处理系统又提供什么接口?
- 网游同步技术:实时动作游戏同步方式和传输协议选择
- 定制Android系统开发之一——提供接口的方式