昨天粗略的整理了一下CCNode的一些文档,方便以后查阅,今天把cocos2d中的类层体系给介绍整理一下,算是逼着自己温故知新吧,如果不写博,我估计还是静不下心来,开始吧
CCDirector
CCDirector是整个cocos2d引擎的核心,游戏之中的一些常用操作控制,比如场景的转换,游戏的暂停继续控制,世界坐标和GL坐标之间的切换,对于精灵(游戏元素)的控制等,还有一些游戏数据的保存调用,屏幕尺寸的获取等;
CCDirector是游戏项目的总导演,会经常调用进行一些控制,所以该CCDirector利用了单件设计模式,也就是项目里取到的director都是同一个;
CCDirector的生成方法为[CCDirector sharedDirector],包含的方法如下
(CGSize) | - winSize |
(CGSize) | - winSizeInPixels |
(void) | - reshapeProjection: |
(CGPoint) | - convertToGL: |
(CGPoint) | - convertToUI: |
(float) | - getZEye |
XXX: missing description. | |
(void) | - runWithScene: |
(void) | - pushScene: |
(void) | - popScene |
(void) | - replaceScene: |
(void) | - end |
(void) | - pause |
(void) | - resume |
(void) | - stopAnimation |
(void) | - startAnimation |
(void) | - drawScene |
(void) | - purgeCachedData |
(void) | - setGLDefaultValues |
(void) | - setAlphaBlending: |
(void) | - setDepthTest: |
(void) | - createStatsLabel |
Scene
Scene场景也是cocos2d中的重要元素,我们可以理解为场景是一个舞台,游戏中最重要的就是构建一个一个的舞台,游戏中关卡,版块的切换就是一个一个场景的切换;CCDirector控制对场景的切换,pushScene,popScene等director中的方法就是控制场景的切换的~有点类似于UINavigationController中的切换方法;
director切换场景的常用方法有
1、(void)runWithScene:(CCScene *)scene
第一次进入场景时调用,如果已有正在运行的场景则不能调用该方法;会调用pushScene-->startAnimation;
2、(void)pushScene:(CCScene *)scene
挂起当前正在运行的场景插入到堆中,执行新场景,只有存在正在运行的场景时才调用该方法;
3、(void)popScene
停止当前正在运行的场景,执行场景队列中之前的场景,只有存在正在运行的场景时才能调用该方法;
4、(void)replaceScene:(CCScene *)scene
用参数场景替代当前正在运行的场景,正在运行的场景被终止;
5、(void)end
终止当前执行效果,释放所有场景,但不会改变场景构成关系;
6、(void)pause
暂停当前运行的场景,场景图被绘制但定时方法等暂停,每秒传输帧率降为4,CPU占用率下降;
7、(void)resume;
恢复暂停的场景,schedule方法继续;
Scene是CCNode的子类,因为场景的特殊性,所以决定了场景是由一个一个的其他元素构建的,精灵和层,菜单(特殊的层)等,通过addChild等方法,这也是继承自CCNode的一些特性;
层Layer
层是依附于场景之上的图层,可以响应用户的操作事件,一个场景常常是由多个层组成的~cocos2d官网上的一张场景分解图可以很形象地说明;
左上的场景由三个layer组成,背景层,精灵动画层,菜单层,三个层有顺序地叠加形成了一个scene,该scene由director,在适当的时候用push或pop等方式来控制游戏场景切换;与用户交互的事件也在层之上进行定义,比如菜单层上定义的点击事件,另外层还可以响应加速计;
层是节点CCNode的子类,所以可以被手动控制翻转或用动作(Action)来进行控制,并可以在其上面添加其他层或者精灵等(addChild);
层的创建由继承自CCNode的node方法来进行,通常在场景的init方法中进行,如下
CCLayer *backgroundLayer = [GameBackground node];
[[CCScene node] addChild:backgroundLayer];
层的叠加顺序取决于z轴(z-order)的值;
层的本质是对节点进行分组(iPhone&iPad cocos2d 游戏开发实战);
精灵Scripte
精灵CCSprite继承自CCNode,可以认为是一个可以被手动控制,执行动作的2D图片,我们在游戏中看到的人物形象等基本上全是精灵;精灵可以在其身上添加子精灵,并且运动时,附着的其他精灵会跟着一齐运动;精灵常常与美术相关;