各位晚上好,咱们接着上回的Cocos2d-X继续说,今天呢,咱们介绍几个核心的类,通过与iOS中的相似的类进行对比,让大家非常轻松的了解Cocos2d-X的框架。咱们先看下图:
1.Director:俗称导演类,Director是Cocos2d-X的核心,也是整个游戏的导航仪,每一个游戏就相当于一部电影,当然电影有好的也有坏的,游戏也有好坏之分,这个导演类以单例的形式存在,我们在开发过程中可以使用Director::getInstance()的方法获取该对象,之后使用对象方法切换场景或者获取比如屏幕尺寸在内的想要的数据,例如,获取屏幕的尺寸咱们就可以使用Director::getInstance()->getWinSize()的方法,当然该函数的返回值是Size类型的,然后通过size.width,size.height获取到屏幕的宽和高;对于切换场景会有以下几种方法,咱们来一个一个的看一下:
(1)runWithScene( Scene *scene );该方法有且仅在启动游戏的时候会调用,只此一次,用来初始化游戏显示的第一个场景。
(2)pushScene( Scene scene ) ;该方法类似于iOS中的pushToViewController:(UIViewController)viewController这个方法,将下一个场景压入栈中并运行下一个场景。
(3)replaceScene( Scene *scene ); 直接使用传入的scene替换当前场景来切换画面,当前场景被释放。这是切换场景时最常用的方法。
(4)popScene() 释放当前场景;类似于iOS中的popToViewController方法,从代码执行场景中弹出栈顶的场景,如果栈为空,直接结束应用。和PushScene结对使用。
对于Director这个类咱们可以对比与iOS中的创建和使用单例的方法来理解和学习。
2.Scene:该类相当于iOS开发中的UIView类,将不同的view加载到屏幕上来展现不同的游戏页面,同时Scene也是一个容器,他可以包含很多的元素。
3.Layer:与场景不同,层通常包含的是直接在屏幕上呈现的内容,我们知道iOS中的view中也有很多的layer,同时一个view可以加在很多的layer,我们可以对每一个layer进行绘制,呈现出不同的样式,当然Cocos2d-X中的Layer可以接受用户的输入事件,包括触摸,加速度计和键盘输入等。例如横屏打斗游戏,人物向前行走的过程中,背景会不断地滚动,但是游戏的控制按钮永远在固定的位置不变。要向场景添加层,我们可以使用addChild方法;
(1)addChild( Node * child ) ;
(2) addChild( Node *child, int zOrder ) ;
(3)addChild( Node *child, int zOrder, int tag ) ;
第一个参数Node为层,可以为继承自Node的子类;zOrder为指定添加的先后顺序,类似于iOS开发中的insertView:(UIView *)view atIndex:(NSInteger)index;可以分步添加child;tag为对应该child的tag值,如果该child非全局的变量,可以通过tag获取该child。
4.Sprite:精灵类,对于iOS开发中的Label,UIImageView相似,它可以移动,旋转,缩放,执行动画,并接受其他转换。对于Sprite的创建方法有很多种,咱们看下系统提供的几种方法:
第一个方法是父类的方法,使用后直接返回Sprite对象,该对象任何的图片或者字体的修饰;第二个方法传入一个文件名字,该文件名为图片名字,创建后返回一个带有图片的Sprite对象,同时创建之后要加在的视图上并且设置该Sprite的position,不然无法确定该Sprite对象所在屏幕的具体的位置;第五个方法通过纹理的方式创建Sprite对象,该方法和第二种类似,也是通过添加image来创建。剩下的几种方法大家有机会可以自己尝试,毕竟不是每一种方法都能用到,咱们主要介绍几种常用的创建方法。
对于Cocos2d-X的几种主要的类咱们就介绍这么多,如果大家想要学习Cocos2d-X,还是要多去查看视频或者资料,并且要自己亲自动手去敲代码,下面有个我修改的一个小游戏,由于这个小游戏在Cocos2d-X 2.2版本下编写,所以我重写了其中的一些方法,导致bug比较多,但是可以运行起来,大家主要学习一下实现一个游戏可能用到的一些方法,通过下面这个小游戏的代码。
参考资料:
Cocos2d-X 官网: http://www.cocos2d-x.org/
小游戏下载地址:
https://github.com/CveniEs/Cocos2d-X