`
yidongkaifa
  • 浏览: 4064090 次
文章分类
社区版块
存档分类
最新评论

打算开始写一个2.5D游戏引擎

 
阅读更多

1、为什么有那么多游戏引擎还要自己写一个游戏引擎?

我本身并不是学图形学的,只是一个有三年游戏开发经验的客户端程序员。我的工作经历告诉我,如果不自己写一个游戏引擎(即便最终不能有实际应用)那么就不会真正使用一个游戏引擎。在处理普通逻辑的时候还没有关系,但是碰到需要对性能进行优化,或者要实现特殊效果的时候就无从下手了。对于底层知识的了解可以在方向上起指导作用。

并且,虽然有如此多的开源游戏引擎,但是没有一个是符合我“审美观”和需求的游戏引擎。无论是cocos2d-x, ogre还是sdl等等,虽然他们都非常成功,并且有大批的使用者以及庞大的开源社区。但是用的时候总有各种不爽。就好像Mac下有如此多的git客户端,但是我需要的不是漂亮的界面效果,而是像windows下的totorisegit一样好用的工具,而不是提交的文件一多就慢的跟乌龟一样的Tower。


2、现有的一些游戏引擎让我不爽的地方

不爽只是个人喜好,或者是个人见解。并不一定是缺点,或许只是使用时的一点点束手束脚,或许仅仅是不知道如何正确的使用,或许仅仅是不知道如何扩充。

cocos2d-iphone算是objective-c语言的“唯一”游戏引擎。其很多设计非常巧妙的把UIKit和cocos2d结合起来,充分发挥了objective-c的语言优势。这个没有太多可以吐槽的地方。唯一要说的或许就是,正因为他使用了objective-c,所以限制了ios和mac平台。

cocos2d-x,是cocos2d-iphone的跨平台版本,使用的是c++语言。但是它用了c++语言的核去模拟objective-c的形。而且过分兼容cocos2d-iphone的接口和设计。这就让这个游戏引擎似是而非。很多设计在cocos2d-iphone上是正确的经典设计,但是在cocos2d-x上面就是恶心的写法。

无论是cocos2d-iphone还是cocos2d-x,如果说他易于使用,我没有太多意见。因为2d游戏引擎就是那么回事,不就是画图片而已,什么引擎“难”使用? cocos2d设计的Director---Scene---Layer的分层设计,非常适合做app store上面的游戏,类似愤怒小鸟,切水果之类的。但是如果说他适合做一个rpg或者是mmo,我就不敢苟同了。不是说不能做,比如《忘仙》《神仙道》就做的相当精彩。 但是想要用cocos2d-x来驾驭一个大型的mmo,就不会是一件容易的事了。因为一旦业务逻辑变得复杂,我们要面临的问题就不是Scene-Layer可以分的清的了。而且cocos2d跟ogre一样,有太多东西需要扩展。

SDL也是个让人又爱又恨的渲染库。非常多的开源游戏都是用SDL写的。但是由于开发进度缓慢,对ios和android的支持一直不是非常良好。虽然我也成功把几个SDL写的游戏移植到ios上面,但是实际过程中碰到很多恶心的事。我个人的感觉就是SDL沿用了windows和linux的平台的思想,把窗口相关的东西都封装到引擎内部了。以至于我需要一些“巧妙”的方法才能把它们再剥离出来。

其他的引擎或多或少都有那么一些类似的问题。就不一一列举了。

3、我需要的游戏引擎是什么样子的?

首先,我不需要一个像unity3d或者u3这样的庞大的商业引擎,开源的东西很难做出如此完整及庞大的工具链。我需要的是一个代码简单并且可控的像SDL或者是cocos2d-x一样的跨平台游戏引擎。他有以下特点:

1、跨平台,我的主要需求是手机平台,所以ios和android是必须的,后期会加入win8,为了开发方便,初期会在windows上面进行开发,所以windows平台肯定也是支持的。

2、代码简单,我计划取名lge(little game engine)。代码简单直接,继承层次简单,功能划分清晰。像SDL我感觉就是为了在所有特性上面兼容各个平台把自己变得复杂了。引擎包含一个底层(渲染引擎,只包含图形渲染功能),一个扩展层(一个网游客户端所需要的各个功能,除具体业务逻辑,比如网络模块,声音模块,动作系统,gui等等).只有简单的东西别人才能看得懂,才能放心使用,如果出现问题也能放心修改。我不喜欢为了设计,为了所谓的解耦合,为了所谓的跨平台就把代码设计的无比抽象。Keep it simple。

3、提供最易使用的接口。比如我非常喜欢网龙的C3引擎,最开始觉得它非常老旧,非常土,接口设计的一点都不面向对象,但是越使用越觉得方便。跟cocos2d-x一比较,就彻底无敌了(自己管理引用计数真是太蛋疼了)。甚至如果c3引擎是开源的,我就不会有自己写游戏引擎的想法了。 c3的各种设计达到了一个让刚毕业的大学生来用都很难把它玩崩溃的地步。不要小看这个,在实际公司和项目中,这个是最有价值的。这个有时间我一条一条对比写。

4、引擎不要试图把各个平台相关的代码用自己的思路进行封装。这个cocos2d-x做的最好,SDL做的最恶心。像C3,无论哪个平台都是init把窗口句柄传进去进行初始化,begin3d和end3d之间进行渲染操作。 窗口完全由客户端进行管理。 因为只有客户端自己才真的知道这个窗口的功能是什么,样式是什么。

5、游戏引擎不仅仅是渲染库,它应该提供网游所需要的各个模块的解决方案。以我自己的使用和经验提供最佳的选择。

6、试验性将一些3d技术引人2d,例如光照(像三剑之舞一样)

7、脚本语言只在最需要的地方加入,也就是说支持脚本语言扩展,但是不提供完全用脚步语言写游戏的功能。完全用脚本语言写游戏在我看来太儿戏了(用python只能写些demo,lua只能写些“小”游戏,c#倒还好),提供这个功能只是提供一个方便的入门而已,真正用来写一个游戏的时候还是会碰到必须用核心引擎代码来解决的问题。就像很多引擎对平台相关的窗体进行封装一样,一般情况下没有什么问题,但是一旦碰到问题或者特殊需求,还是要接触这些东西。作为一个游戏程序员,这些是跑不掉的。想通过一个游戏引擎可以达到“不学这个,不学那个”的目的本身就是错误的。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics