cocos2d-x基本元素

from://http://www.cnblogs.com/ArmyShen/p/3239664.html

1、CCDirector(导演类)

控制游戏流程的主要类,主要负责设定游戏窗口、切换场景、暂停或恢复场景等工作。

由于CCDirector的全局性,所以它是一个单例,整个程序中只会存在一个它的实例:

//获得CCDirector实例
CCDirector *pDirector = CCDirector::sharedDirector();
复制代码
/*--------CCDirector场景管理方法--------*/
//程序启动时运行第一个场景时调用
void runWithScene(CCScene *pScene);

//直接替换当前运行的场景为pScene,这是最常用的一个场景切换方法
void replaceScene(CCScene *pScene);

//将当前场景暂停,压入到带待执行场景栈中,设pScene为当前运行的场景
void pushScene(CCScene *pScene);

//释放当前场景,并从待执行场景栈中弹出栈顶场景,将其设为运行场景。如果栈为空,则退出程序。与pushScene结合使用
void popScene(void);

//暂停当前场景中的所有内容
void pause(void);

//恢复暂停的场景,与pause结合使用
void resume(void);

//结束场景,退出游戏
void end(void);
复制代码

2、CCScene(场景)

没有特别的功能。通常是作为层(CCLayer)的容器,它的另一个作用就是流程控制,可以利用CCDirector::replaceScene(CCScene *pScene)自由的切换场景。

可以使用CCLayer替代CCScene,但是这样就不能使用CCTransitionScene实现场景间的切换效果了。

3、CCLayer(层)

CCLayer和CCScene有类似的作用,就是作为游戏元素的容器。不同的是,CCScene中通常包含一个一个CCLayer,而CCLayer中通常包含CCSprite、CCMenu、CCLabel等用户可见的节点元素。CCLayer另一个重要的作用就是接收用户的输入事件,包括触摸、重力加速、键盘输入等。

4、CCSprite(精灵)

CCSprite是游戏最重要的组成元素,游戏中的一草一木都是通过CCSprite体现出来的。创建CCSprite有很多种方式,使用起来也非常的灵活,具体参考源代码。

5、CCNode(节点)

CCNode是所有游戏元素的基类(CCScene、CCLayer、CCSprite等),因此这些子类节点共同拥有CCNode所提供的特性。也就是说继承自CCNode的可绘制节点都拥有比如位置、缩放、旋转、是否可见等属性,节点的最基本功能包括:

1)包含其他CCNode对象 -- 可以把任何一个CCNode节点添加到另一个节点上去

2)接收各种事件与回调 -- 如定时器事件

3)执行动作 -- runAction

6、定时器

定时器:以一定的时间间隔,不断的检测游戏事件,从而使游戏发生动态变化的工具

Cocos2d-x提供了两种方式的定时机制:

1)update定时器 -- 该方法每帧都会被触发调用一次。CCNode默认没有开启update方法,可以调用scheduleUpdate()启用定时器,unscheduleUpdate()停止定时器,最主要的还需要重载一下CCNode的update(float)方法,需要定时更新的内容都在update函数中实现。

复制代码
//开启定时器
this->scheduleUpdate();
//每帧调用update函数,更新里面的内容
void update(float delta)
{
    i++;
}
复制代码

2)schedule定时器 -- 该方法可以让用户设置触发调用的时间间隔。要注意的是,这个时间间隔必须大于2帧的间隔。

复制代码
//每隔1s调用一次updateGame函数
this->schedule(schedule_selector(HelloWorld::updateGame), 1.0f);
//updateGame函数
void updateGame(float dt)
{
    i++;
}
复制代码

7、onEnter() / onExit()方法

onEnter() -- 节点所在的场景即将显示的时候被调用

onExit() -- 节点所在的场景即将退出时被调用

通常一个继承自CCNode或CCLayer的类中都会有一个init()方法用于初始化这个节点上的数据,init这个方法也是对基类相同函数的重载,需要注意的是,init()这个方法会在onEnter()方法之前被调用。它们主要的区别就是init()方法只会在类初始化的时候被调用一次,而onEnter()方法会随着所在节点的隐藏显示可能会被调用多次。

原文地址:https://www.cnblogs.com/wanqieddy/p/3385545.html