cocos2d-x是一个游戏开发引擎,从发布到现在也有五六年了,一路看它慢慢壮大。它是现在应用最多的开源2d引擎,没有之一,据说已经占领90%的市场,所以,对于想从事游戏开发的童鞋来说还是有必要学习一下的。
那么问题来了,什么是游戏引擎?
一个写安卓和ios应用的程序员,如果想通过自学来转向游戏开发,这个问题肯定要先弄清楚,否者堵在心里会不踏实,也不利于后面的学习。学习一个事物,首先要了解它的本质,而不是上来就去用它。
汽车引擎,飞机引擎,生活中很好理解,你看得见,摸得着,好像不需要解释。汽车引擎,可以理解为就是发动机,汽车最核心的部分,整部汽车的动力系统,是汽车的心脏。
那么游戏引擎呢,怎么理解。
汽车没有发动机,从外观上或许还是一部汽车,但是它也就长了一个汽车的样子,跟一堆废铁没什么两样。
而一个游戏引擎却并不是这样。开发一款游戏,你可以使用引擎,也可以不使用引擎,开发完成之后它都是一个游戏。你可以在安卓上用安卓的应用接口来开发一个java游戏,塔防,连连看,横版rpg,这都是没有问题的。因为游戏,本质上就是一个无限循环(游戏循环),你所有的逻辑都在这个游戏循环里面,所以你完全可以自己实现,不借助任何引擎。
所以,有人喜欢把游戏引擎比如成汽车引擎,我认为这是不正确的。你告诉新手,游戏引擎就像汽车的发动机,是动力源泉。那么问题来了,我自己写的游戏没有引擎,这个怎么理解成汽车发动机,汽车没有发动机就是堆废铁了。
游戏引擎,更应该理解为一组工具,一个框架。像cocos2d-x这类引擎,属于代码引擎,就是说它提供大量封装好的代码,你需要学习各个代码模块的使用方法才能熟练运用。这类引擎学习成本较高,因为要熟悉引擎源码。还有一类引擎像Unity3D,属于高度封装的工具性引擎。学习成本要低一些,因为他更直观,更上层。但是想要精通引擎,都需要有扎实的编程功底。我这里只讲讲cocos2d-x,有机会以后讲Unity3D。
cocos2d-x说白了其实就是一个开发框架。你用不用它,游戏没有本质的区别,区别在于开发的过程。比如安卓上,同样是写一个连连看场景,如果不使用引擎,你可能需要自己写个view,计算可视区域,根据可视区域计算每一个方格的大小,每个格放一个图片,调用onDraw方法来重复绘制,这样开发出来一个连连看,是跟安卓平台相关的,因为你使用了安卓应用框架的上层API,这个游戏不可能直接移植到ios平台上去。同理,你在ios平台用oc开发一个这样的游戏,那么它跟ios平台相关,你也不可能移植到安卓平台上去。然而,如果使用cocos2d-x引擎,那么就需要熟悉引擎里面一个场景的概念,精灵的概念,节点的概念,然后使用引擎的方法把这些小元素组织起来,就是一个游戏场景。这个时候开发出来的游戏,就可以移植到多个平台。
为什么会这样?
这就是cocos2d-x引擎的威力了。前面说了,引擎只是一个框架,使用与否似乎没有多大区别。然而并不是。大家知道,游戏无非就是将一些图像,声音按照一定的逻辑组织在一起的一个应用。而各个平台有他们自己的组织方式,对于各平台的上层开发者来说,你已经遵循了这个平台的组织方式,那么开发出来的游戏当然不能拿到另一个平台去运行,因为它不遵循另一个平台的组织方式。如果有个组织方式,在各个平台上都通用,那么不就可以按照这个方式开发出来夸平台的游戏了么。是的,cocos2d-x就是这样的一个组织方式。引擎会做很多基础工作,比如怎么把一张图片显示在屏幕上,怎么播放声音,怎么过渡画面,怎么制作特效。所有游戏里面有的元素,都会被封装成一个个完整的实现,你只需要拿来用,不需要关心怎么实现的。而cocos2d-x引擎做了更多,它实现了整个游戏的主循环,同时提供很多小颗粒的代码封装,比如例子特效,声音播放,动画特效,这些只需要调几个函数就可以实现。我们只要在主循环里面组织游戏逻辑就可以实现整个游戏了。这个过程就像做一个仿真人,给了你一个人体骨架,制造肌肉,制造毛发,制造血的设备,你只需要按照骨架,制造相应的血肉填充到骨架里面,最后一个仿真人就出来了。再说它为何可以跨这么多平台,其实并不是它天生就这样。只是因为,它跨的平台都支持标准的openGL ES接口,引擎针对不同的平台,做了一些适配工作,让各平台都使用openGL ES来绘制图像,然后使用C++来实现底层逻辑,这样就可以跨平台了。说的比较简单,大家可以看我之前的博客,有比较详细的讲解cocos2d-x如何跨安卓,win和ios三个平台的原理。
最后总结一下,游戏引擎其实就是一个框架和相应的一组代码模块。在这个框架上,使用这些代码模块来实现游戏逻辑,会事半功倍,最后开发出一款游戏。