今天看到一篇大肆宣扬SDL的文章,介于我也小小的研究过一会这个2D游戏引擎,而国内对于这个引擎又推广不够,在此抛砖引玉 小小翻译一个吧。很多地方可能理解不对,大家多多包涵。
先说说我对SDL的一些理解
1.SDL是一个2D游戏引擎(国内这么说,但是我觉得把它称为“引擎”还是太过了,我觉得引擎级别应该至少到framework了,SDL提供的功能没有这么强大。),其提供一个游戏必要的一些简单的API接口,并且非常底层。
2.SDL最牛逼之处就在于其简单、跨平台。一切基于SDL的代码都应该是高度portable的。所以可以考虑做一个基于SDL的中间件,估计挺有卖点。。呵呵。
3.SDL免费,开源。
4.可以搜一下著名的linux下战略类游戏 韦诺战争(貌似没有WINDOWS版本)。就是基于SDL的大作。
5.SDL貌似经常用来写跨平台播放器,很方便。
6.曾经打算用SDL开发游戏。。结果发现功能太低级,于是乎转用HGE了,以后再慢慢研究吧。。
我曾经用SDL写的简单的界面。。由于一开始就没搭好framework,后来做不下去了。。
为什么选择SDL?
Bob Pendleton 2002年8月
我在写这篇文章的时候,我已经用SDL将近一年了。在选择SDL之前,我花上了几年时间来寻找和尝试不同的游戏开发库(BY CG,此处game develop lib直译为游戏开发库,但是貌似国内一般直接叫游戏引擎,其实我觉得不该叫游戏引擎,其相当于一个中间层,还没有到framework的引擎级别,所以暂时我把它翻译成游戏开发库)。我当时想找一个有授权证书的游戏引擎——不会让我在写代码的时候为它的合法性担忧,并且在我写商业游戏的时候不用付太多的钱来获得它的许可。而且我还需要它横跨广泛的硬件设备和操作系统(BY CG:就是跨平台咯)——在笔记本电脑和手机飞速发展的现在没有任何理由让开发被束缚于单独的操作系统或者平台。在我找寻多年以后(呵呵,我承认我是更多的出于兴趣而不是为了赚钱),我发现了3个系统看上去比较爽。
第一个是JAVA,我觉得JAVA无论作为一个语言还是一个系统来说都太爽了。你能想到的做游戏要用到的,它全都有。但是!它并不通用,并且我发现当我要让别人玩游戏的时候还得让他们先装超过20MB的JAVA安装包,这一点极大限度的限制了我游戏的发布。
我还深入研究了一个来自Amiga(BY CG 应该是一个软件公司吧?)新的可移植多媒体系统,但是它让我越用越不爽。。在我浏览了几个免费的游戏开发库之后我决定仔细看看SDL。不看不知道,一看吓一跳,SDL很让我震惊,它不像你在网上找到的其他游戏开发库,SDL是由一群有经验的牛逼人设计和开发的,SDL被巨多优秀的程序员维护和支持,SDL是一个游戏开发者们写给游戏开发者的库!
我觉得在我刚开始接触它时,它对我最有吸引力的是:SDL没有想在你的游戏开发中充当一切角色。它仅仅做每一个游戏需要做的最基本功能,在任何平台上你都可以用它编码。你可以在windows下写个程序然后直接在linux或者MAC OS(BY CG 苹果的操作系统)、或者手机终端等等..下重编译。它提供你需要的、实用的而不是丢给你一堆杂七杂八的功能。如果你在windows下运行,SDL是基于DIRECTX的。如果你在LINUX下,则它是基于 X 和其他的一些库。关键是,不管什么平台,他就是能运行!(BY CG 这个貌似有点夸大了。。)我花了几个月来写测试程序,一边用来学习SDL,一边尝试寻找SDL里的BUG。在这几个月里我仅仅发现几个文档性的小错误,并且是很容易解决的。我在SDL上进行了一些变态的尝试,比如写个10000个定时器的程序,而且这样还挂不了。。每次我发现我认为是BUG的地方,最后发现都是因为我对说明文档的误解。有次我认为我发现了一个严重BUG,然后上网一搜,这个BUG已经SDL开发者被修正了。
SDL 小,可移植,而且可信赖。它只做你需要做的事情,SDL的基本哲学观就是集合“精简达意”和“简单”。
SDL里有啥?
1.技术支持
SDL团队是我见过网上办事最有效率的团队。在Sam Latinga等帮助下,一帮牛逼志愿者维护其代码,并且不断移植到新的平台。SDL的mailing list(BY CG 请原谅我的火星,看了一下貌似国外很多网站都有这种机构,把对官方的询问EMAIL记录都贴到网上的一种机制。)为SDL用户们提供永远的快捷服务。mailing list提供庞大的SDL使用信息和在游戏开发过程中的问题解决方法。
2.初始化和释放
我们平时在每个平台下开发,都要求程序员写一些平台相关的代码,来指引操作系统做什么、硬件做什么。那么,你不得不写更多的平台相关代码。你需要设置显示模式、初始化音频系统、检测鼠标或者摇杆……而且在游戏结束之后你要清空或释放这些你用到的资源。。这些代码基本在每个工程里都相同,SDL提供一种简单的机制来检测硬件,只需要几行简单的代码你就能初始化资源,释放资源就更别提了。并且SDL离的代码可以到处拷贝和复用到其他工程。
3.基于事件的输入机制
SDL提供键盘、鼠标、摇杆输入,使用事件机制,这样就是的在X11、WINDOWS或者MAC OS上的开发者感到非常亲切了。不同的是,SDL不管你在什么操作系统上,都提供给你相同的事件,并且它不会让你处理操作系统相关的那堆让你写游戏过程中不爽的事件。
4.时间和定时器
每个游戏程序都需要知道时间,并且需要知道一个行动什么时候发生。SDL提供一个跨平台的,清晰、简单、可信的时间机制和定时器API。SDL的定时器API允许同时创建上千个定时器,而且比我以前用的其他库的定时器要用的爽。
5.声音
SDL提供一套简单的API控制声卡,根据需要操控不同的硬件设备。即时硬件支持度较低,它也能干活。在这一点上非常符合它的“精简达意”哲学观。在另一方面,还有许多SDL团队不断开发出来的SDL声音库。
6.光驱
SDL提供读、播放光驱的API。无敌了!(BY CG,谁告诉我这里 Can't beat it. 咋翻译?)
7.图像
SDL提供给你一个尽情发挥图形处理的机会。你可以从像素级拿数据然后随你怎么处理,或者你可以用OPENGL来做2D、3D的硬件加速。这是在任何硬件设备上都能做的,因为OPENGL支持所有的3D显卡,它是安全、可移植的,并且很生猛的跨平台3D库。SDL可以设置视频模式,可以访问帧缓冲区,如果你需要,还为你初始化OPENGL。SDL将解除你制作全屏游戏模式的痛苦(BY CG,不知道痛苦在哪。。没用过太底层图形库的人飘过),同样,也可以做窗口游戏。
8.网络
SDL包含了一组底层的网络API,让你可以控制基于TCP/IP或者UDP/IP的scokets。这一组API和UNIX、WINDOWS的网络API很像,不同的是它只让你用网络特性,可以跨平台。并且这些API已经实现一些底层的功能,不用让你在写网络通讯代码的时候觉得痛苦。
9.线程
SDL提供一套像pthreads简单版本(BY CG,又不知道是啥了。。我靠,我太弱了)的线程API。SDL线程提供线程管理的基本函数。而且也是跨平台的。
SDL的不足之处
唯一让我觉得不爽的就是它的文档,有的地方有小错误,有的地方给得太吝啬了。但是这比起这个伟大的游戏开发库来说不算什么,这些文档带来的疑惑你都可以在写代码的过程中 或者看其他示例代码来搞定。
SDL多少¥?
免费!SDL 基于LGPL(BY CG貌似是某种免费协议机制?),你只需要遵守一些简单的规章,每个人都能获得免费的SDL认证。
SDL哪有下载?
官网 www.libsdl.org ,心动不如行动,赶紧下载吧~读一下它关于版本的FAQ,你可以开始或者升级你手头的工作,用它上面提供的搜索功能找你需要的资源吧。
SDL对于我来说有什么?
对于专业的游戏开发者来说,SDL提供一个清晰明了的开发库来节约你的开发时间,提高产品质量,并且可以让你的游戏跨平台跑,扩展销售范围。但是无论对于专业人员、业余爱好者或者新手来说,最大的好处就是SDL让你把开发过程专制于游戏上面,而不是游戏运行/开发的平台上面。并且,你可以不用花费大量的财力来购买软件开发工具和游戏开发库。
每天在我的mailing list和私人邮件上我都收到来自世界各地游戏开发者的请求,他们都没钱购买商业软件开发工具。使用SDL和Linux+GCC+OpenGL你能开发游戏,不用花一分钱在开发工具上。即时在WINDOWS下,你也能用SDL+GCC+OPENGL来写高质量的游戏,除了你的电脑和WINDOWS之外不用花一分钱。SDL让初学者和爱好者们免费使用,如果他们想开发一些商业用途的程序,移植到例如WINDOWS或者MAC OS这种有着大量用户系统下都是可行的。不只代码本身可移植,他们的技术也能被移植。
总而言之,SDL能节约你的时间和钱,而且让你的游戏有更多的玩家。