转载地址:http://www.cnblogs.com/mmidd/p/3761290.html
copy一下总结
Node类:
- Node 类在Cocos2d-x里地位显赫,它是显示对象(在手机等设备里显示的东西)的基类。
- Node类是一个树状结构的一个结点,它最多只有一个父结点,可以有多个子结点,这些子结点存放在一个vector的数据结构中
- 创建Node对象不要使用new方法,而使用create方法。
- Node类的内存管理是走的autorelease机制的,所以不要delete对象而是采用Cocos2d-x的引用计数机制来释放对象。
- 向node结点中加子结点时用addchild方法(这里如果忘记了addchild都干了些什么可以翻到上面回顾一下)
- 将node结点显示到屏幕上使用visit方法,在visit方法里面会调用draw来绘制node.我们在使用的时候可以重载draw方法这样就可以让node按自己的方式来显示出来。
- node还支持名称,tag(id)等标识,可以通过这些标识来查找node的指针。
- Node还支持一些旋转,变形,绽放等操作,并且这些设置子结点也会继承的。
- Node里面还引用了 定时器,事件分发,动作管理器等。
- Node有一些自己的事件,当被加入到入结点中会调用 enter当被移出父结点时会触发 exit
Scheduler 类:
- Scheduler 类是cocos2d-x里的调度控制类,它分两种调度模式 按帧调度与按时间间隔调度 ,当然,如果时间间隔设置小于帧的时间间隔那么就相当于按帧调度了。
- 按帧调度被集成在Node类里,调度的回调函数就是Node::update函数。
- 按时间调度可以分两种形式对象形式, 一种 是Ref基类的对象,一种是任意对象。
- Scheduler实际上是存储了很多小任务的列表管理器,每一个定时任务都是以Timer类为基类实现的。管理器的列表以对象的指针哈希存放的。
- cocos2d-x引擎启动后Director类会创建一个默认的调度管理器,所有的Node类默认都会引入Director的调度管理器,调度管理器会在Director的 mainLoop里的 drawscene方法里被每一帧都调度。
Director 类:
子类 DisplayLinkDirector:
这个类实现了Director的几个关键的虚函数。
mainLoop这个是最主要的了,上面我们一再说逻辑循环 逻辑循环,其实都是指这个函数,所有的操作,动画,渲染,定时器都在这里驱动的。
游戏主循环里反复的调度 mainLoop来一帧一帧的实现游戏的各种动作,动画……. mainLoop来决定当前帧该执行什么,是否到时间执行等等
void DisplayLinkDirector::mainLoop()
{
if (_purgeDirectorInNextLoop)
{
_purgeDirectorInNextLoop = false;
purgeDirector();
}
else if (! _invalid)
{
drawScene();
// release the objects 内存管理(autorelease)
PoolManager::getInstance()->getCurrentPool()->clear();
}
}
下面我们做个总结。
Director主要管理了场景,四个事件的分发,渲染, Opengl对象,等
它主要是以场景为单位来控制游戏的逻辑帧,通过场景的切换来实现游戏中不同界面的变化。
其实 mainloop这个函数 调用 了drawscene来实现每一帧的逻辑主要是渲染逻辑。
上一章节,我们读到了application里面有一个run方法 ,在run方法里面有一个死循环,那个是游戏的主循环,在那个死循环里不断的调用 director->mainLoop这个就是在主游戏循环里不断的执行逻辑帧的操作.