cocos2Dx(2)——核心类备忘

1. cocos2D引擎将游戏的各部分抽象成为几个重要概念:

导演Director、场景Scene、布景层Layer、精灵Sprite.

2. 节点类CCNode

2.1 CCNode 继承自CCObject,任何需要画在屏幕上的对象都是节点类。包括场景类CCScene、布景层类CCLayer、精灵类CCSprite、菜单类CCMenu等。

2.2 CCNode类不自带贴图,屏幕上是看不到节点类效果的。CCNode类使用场合一般包括:

(1) CCNode运行的动作和设置的旋转角度等属性都可以传递给子节点,所以可以定义一个CCNode对象来管理一批子节点,这个CCNode对象本身是不显示的。

(2)定义CCNode的子类作为屏幕上的显示对象。

2.3 CCNode的子类需要:

(1) 重写初始化方法init()和周期性回调方法。

(2) 在时间线上控制回调。

(3) 重写渲染绘制方法。

3. 导演类CCDirector

3.1 CCDirector类继承自CCObject,且有子类CCDisplayLinkDirector类,该类是一个可以自动刷新的导演类。

3.2 CCDirector类是cocos2d-x引擎的核心,用来创建并控制主屏幕的显示,同时控制场景的显示时间和显示方式等。功能主要包括:

(1) 初始化openGL会话。

(2) 设置OpenGL的一些参数和方式。

(3) 访问和改变场景以及访问cocos2d-x的配置细节

(4) 访问视图。

(5) 设置投影和朝向。

3.3 CCDirector是单例模式,整个游戏通常只有一个导演。通常通过CCDirector::sharedDirector()->setDisplayStats(false);的方式来调用CCDirector的方法。

4. 场景类CCScene

4.1 CCScene继承字CCNode,CCScene拥有自己的锚点,默认值(0.5,05)。

4.2 通常将屏幕上所有显示对象的父节点设置为一个场景,通过场景来管理这一批显示节点。

4.3 CCScene有子类CCTransitionScene(切换场景类),CCTransitionScene类有很多子类,这些类都是用于场景切换的特效。

4.4 新建场景:

(1) 定义场景对象并给场景添加布景层等子节点。

使用CCScene::create();方法新建场景实例;

CCScene类继承字CCNode的方法addChild();给自己添加子节点。

(2) 调用导演类方法获得并运行场景。

调用CCDirector::sharedDirector()->runWithScene(pScene);方法运行场景。

4.5 场景切换过程:

(1) 调用CCDirector::sharedDirector()->purgeCachedData();清空缓存;

(2) 新建新场景对象;

(3) 调用CCDirector::sharedDirector()->replaceScene(this);替换新场景;

4.6 场景切换特效

游戏中的第一个场景,使用CCDirector::sharedDirector()->runWithScene(pScene)使用,若无过渡直接替换场景,使用CCDirector::sharedDirector()->replaceScene(pNewScene);切换到新场景。

若需要使用场景间的切换效果,需使用相应的场景切换类,场景切换类都继承自CCTransitionScene,使用场景切换类的步骤:

(1) 新建目标场景。

(2) 使用特定效果的场景切换类的方法create创建特效场景,该方法的第一个参数是特效切换时间,传入一个CCTimer对象,方法的第二个参数是待进入新场景,即要切换到的目标场景,某些特效场景类需要提供第三个参数。

(3)  调用CCDirector::sharedDirector()->replaceScene();将(2)中定义的切换场景类对象传入。

注:有某些场景切换类需要做额外操作,如设置摄像机、检查OpenGL版本是否支持等。

5. 布景层类CCLayer

5.1 CCLayer是CCNode的子类,并且继承了CCTouchDelegate类、CCacceleromelerDelegate类、CCkeypadDelegate类。所以CCLayer是遵守触屏代理协议、加速传感器代理协议和键盘时间代理协议的节点类,通常用来作为场景中独立的层,布景层上可以放置文本、精灵、菜单等元素,通过层与层之间的组合关系形成游戏的界面UI。

5.2 通常在CCLayer的init()方法中进行布景层的绘制、添加元素等操作,调用场景类的addChild();方法将布景层对象加入到所在场景。

5.3 CCLayer的子类及其基本功能

(1) 颜色布景层类CCLayerColor

可以为布景层增添颜色、设置透明度。

(2) 多层布景层类CCLayerMultiplex

管理多层布景层,(多个页面但不需要场景切换)。

(3) 菜单类CCMenu

菜单项容器,装载各种菜单项。

(4) 控件类CCControl及其子类

实现各种控件,包括拖动滑块(CCControlSlider)、颜色选择盘(CCControlColourPicker)、开关按钮(CCControlSwitch)、按钮(CCControlButton)等。

6. 精灵类CCSprite

6.1 精灵是一张二维图片对象,可以用一张图片或一块矩形来定义。CCSprite继承自CCNode类,同时继承了CCTextureProtocal类和CCRGBAProtocal类。CCSprite类和它的子类对象都可以作为精灵批处理类CCSpriteBatchNode的处理对象。

6.2 精灵批处理类CCSpriteBatchNode

为将多个精灵只进行一次准备一次渲染和一次清理以避免频繁调用openGL函数而提出的,同时处理多个精灵对象的类。CCSpriteBatchNode继承自CCNode和CCTextureProtocol类。

6.3 精灵帧类CCSpriteFrame

一个精灵是一个固定的节点,可以有很多精灵帧,精灵帧之间的切换构成动画,CCSpriteFrame对象用于表示精灵的帧。CCSpriteFram对象通过贴图类CCTexture2D定义。CCSpriteFrame继承自CCObject。

6.4 精灵帧缓存类CCSpriteFrameCache

CCSpriteFrameCache用于提前存储精灵帧以提高效率,CCSpriteFrameCache是单实体类,所有精灵共享使用。继承自CCObject。

7. 摄像机类CCCamera

所有节点都拥有一个摄像机类CCCamera对象,当节点发生缩放旋转或位置变化时,需要覆盖CCCamera类,使得节点通过CCCamera类重新渲染。当使用摄像机类实现缩放旋转和位置变化时,CCNode类本身的缩放旋转这些方法不能同时使用。

CCCamera类通常用于实现三维效果,如果只需要实现二位特效,更推荐使用CCFollow类。

8. 容器类CCArray和CCDictionary

9. 拖动渐隐效果类CCMotionStreak

实现游戏对象运动轨迹上的渐隐效果。继承自CCNode类、CCTextureProtocol类和CCRGBAProtocol类。

10. 绘制图形

重新CCNode类的draw()方法并在其中绘制图形。所以自定义的继承字CCNode的对象都可以通过重写draw()方法来绘制。

cdDrawLine绘制直线,ccDrawPoint绘制点,ccDrawCircle绘制圆等。

11. 时间调度

所有CCNode的子类都具有时间调度函数,schedule(schedule_selector(Class::method), 10.0f);

第一个参数使用schedule_selector将函数名传进来,第二个参数是时间间隔,定义这个参数后会隔一段时间调用一次该函数,知道unschedule被调用。

unschedule(schedule_selector(Class:method));

原文地址:https://www.cnblogs.com/litterrondo/p/3090997.html