Ejoy2D是一款图形引擎、基于C和Lua开发,底层是一个十分简单的核心层,基本上只负担绘制工作,上层语言是Lua。Ejoy2D是国内简悦(EJOY)游戏公司所开发的一款游戏图形引擎,旨在帮助开发人员轻松地嵌入到游戏引擎中,方便开发者定制自己所需的功能。遵循MIT开源许可。
托管地址: https://github.com/cloudwu/ejoy2d
CSDN记者联系到了Ejoy2D项目负责人云风(微博:@简悦云风),请他来分享Ejoy2D的开发历程及他在游戏开发方面的感悟。
云风:真名吴云洋,曾任网易杭州研究中心总监,是网易《大话西游》、《梦幻西游》等游戏的主要开发者,他在2011年9月从网易辞职,并与前网易COO詹钟晖联合创办了简悦(EJOY)游戏公司,任公司CTO。
Ejoy2D项目负责人 云风
CSDN:Ejoy2D项目创建的初衷是什么?
云风:Ejoy2D的起源来自于我在2013年初玩到的一款叫Clash of Clans的移动平台游戏,这让我发现在移动平台上,除了一个人玩的传统游戏之外,还可以有非常有趣且结合移动平台特性的游戏类型存在。在此之前,我们公司并没有立刻开始移动平台开发计划;之后,我们迫切的想进入移动平台游戏的开发领域。在经过公司内部的充分讨论后,我们打算先模仿Clash of Clans做一款类似的游戏练手。我个人判断,把这类游戏做好,客户端开发有一定的技术门槛,不太容易做的好。而我在十多年前就开始做2D游戏引擎,很有自信可以为这款游戏定制一款新的、适应移动平台开发的2D引擎。这就是Ejoy2D的开始。
在独立开发了大约一个月后,从我们的PC端游戏组调出了一名同事,和我一起来制作这款新游戏。边用边对Ejoy2D提出新需求,并完善它。
到了2013年7月左右,我们的外包美术资源开始进入,这时,我们又从外部招聘了一名同事专门为 Ejoy2D定制美术工具。这样才慢慢完善了工具链,最终把游戏做了出来。这款游戏就是现在的陌陌争霸。
从一开始,我就希望把引擎开源。因为之前我们开源的游戏服务器框架Skynet反响很好,帮助了不少朋友,同时开源也提高了代码质量,不少bug都是公司之外的同学发现的。这让我们在自己生产环境碰到bug前就得以修正。
但一开始的Ejoy2D代码很不稳定,且充满了为了游戏项目能快速完成而临时添加的补丁,所以直到我们的陌陌争霸基本完成。后来,我花了大约2周时间全部重写了Ejoy2D的代码,觉得可以与大家见面了,就公布了代码,并发布了开源的消息。接下来,我们内部有两个新的项目组开始使用新版的Ejoy2D开发游戏,这两个组都有同事开始为Ejoy2D贡献代码。
CSDN:与其它游戏引擎相比,比如Cocos2d-x,Ejoy2D有哪些与众不同的地方?
云风:Ejoy2D其实是对OpenGL ES的一个浅封装。我并不想把它发展成一个游戏引擎,而只停留在图形引擎层面上。但和别的引擎相比较大的区别是,它天生为和Lua结合而设计并实现的。你几乎不可能只使用Ejoy2D的C API ,而我鼓励你只用Lua API在其上做开发。只有解决不了的需求时,再编写一个供Lua调用的C模块。由于这种设计,在使用方式上,Ejoy2D应该会比其它结合Lua脚本的引擎更高效些,使用起Lua API也会更自然。同时,Ejoy2D保留了很小的C内核,代码全部用很简短的C实现。阅读理解起来会比较容易,维护它更轻松一些。
CSDN:您们最近上线了一款手游,叫陌陌争霸,在这款游戏中,Ejoy2D都做了些什么?
云风:陌陌争霸的客户端全部用Lua开发,客户端引擎就是用的Ejoy2D 。但Ejoy2D仅仅只是图形引擎,所以我们还用C编写了网络模块,资源打包的模块等等。陌陌争霸对AI方面还有比较高的性能需求,我们还用C语言为AI,士兵寻路编写了一些代码(在大部分其它类型游戏中,用Lua实现性能就够了)。
由于陌陌争霸开发的比较早,当时的Ejoy2D没有现在的版本完善,所以陌陌争霸组的同事在UI模块、粒子系统上花了更多精力。这些在现在开源版本的Ejoy2D中,在引擎层面已经做了更多的支持。
CSDN:对于使用Ejoy2D的用户,您有哪些建议/经验告诉他们?
云风:最好能通过阅读代码来理解Ejoy2D的结构,明白它能解决什么问题。然后尽量只在Lua层面使用它。把需求提到开源社区,大家来判断该如何改进引擎适应不同的需求。对于很多引擎,通读所有的代码是件工作量很大的工作,但是Ejoy2D不同,它很简短,花不了太多时间。
CSDN:从风魂引擎到Enjoy2D引擎,您在引擎和游戏开发方面有什么心得?您的设计思想和实现方式有什么变化?
云风:风魂是我大学时代的作品,到现在已经有十多年过去了。当初我希望尽量帮助游戏开发人员解决所有问题,而现在不这么想了。我希望使用引擎的开发人员有足够的选择权。作为一个图形引擎,应该尽量配合开发人员的选择权,尽可能的把引擎做成一个方便开发人员组装的一个组件。
引擎的实现应该足够简单,并尽可能的隐藏需要引擎解决的技术细节。
CSDN:与开发PC游戏相比,开发移动游戏的痛点是什么?
云风:我并没有正经的开发过一款传统的PC游戏,而我在意识里并不把MMO Game和传统游戏归为一类的。在移动平台上开发游戏让我找到了一些开发游戏的乐趣,我觉得比开发MMO游戏更加有趣。至于痛点,我觉得在国内做游戏,或多或少的要迎合渠道的想法很讨厌。比如说,我不希望我们的游戏需要玩家有一个账号才能开始游戏,而各种国内的平台会强迫你接入他们的SDK ,需要玩家注册账号,然后才能开始游戏。
CSDN:从事游戏开发这么多年,您最大的感悟是什么?
云风:心无旁骛方能获得无穷乐趣。
CSDN:您一直都在鼓励大家开源,并且把自己的一些作品都开源出去了,这样做给您带来了哪些好处/乐趣?对其它开发者来说,把自己的作品开源出去有哪些好处?
云风:开源对自己毫无损失。反而会督促你把代码质量提高,设计时也需要考虑得更完善。如果有其他人使用,他们往往会以一种你不曾考虑过的方式来用,从而发现你发现不了的漏洞。这些漏洞可能是实现上的,也可能是设计上的。
CSDN:您已经这么牛了,在这个圈子里,有您崇拜的技术大腕吗?您认为这些人身上都有哪些特点?
云风:想不到 “崇拜” 这个词能用在什么人身上,我不认同人和人之间产生 “崇拜”的这种情感。只能说我喜欢怎样的人吧。我喜欢思维理性,有想像力,有执行力,总能自己动手去解决问题的人。
以“启蒙・开源”为主题的2014开源技术大会(Open Source Technology Conference 2014)将于3月30日在北京召开,目前公开征集演讲议题,欢迎各路开源大侠积极参与。届时云风将亲临现场,分享他多年的开源开发经验,欢迎大家来领略大神的风采。