Cocos2d-x 3.x程序结构
Cocos2d程序中的资源由Director类,Director类中可以有多个场景,每个场景中可以包含多个层,每个层可以包含精灵、层、按钮、Label等等元素。
Director类
Director是一个抽象类有4个纯虚函数,DisplayLinkDirector继承至Director类,实现了Director类的4个纯虚函数,mainLoop、setAnimationInterval、startAnimation、stopAnimation。
DisplayLinkDirector采用单例模式,整个程序只有一个示例,在程序第一次调用Director::getInstance时实例化。
Director类负责管理调度整个程序,包括场景管理,调度器的管理,动画的管理,事件的管理,纹理的管理等等。
场景管理
Director类有一个场景栈,通过这个场景栈控制场景的运行,切换,删除等等。
void runWithScene(Scene *scene);//启动游戏并运行场景,第一个场景调用此函数
void pushScene(Scene *scene);//往场景栈中压入场景并替换当前场景
void popScene();//弹出当前场景
void popToRootScene();//弹出到根场景,例如:回到主菜单场景只需调用这个函数
void popToSceneStackLevel(int level);//弹出指定层次的场景
void replaceScene(Scene *scene);//运行scene,替换当前场景
游戏中可以有多个场景,但同时有且只有一个场景运行。例如一个主菜单场景,一个游戏场景,点击开始游戏后进入游戏场景,主菜单场景则切换到后台运行。游戏中的第一个场景需要调用Director::runWithScene函数,因为Director::runWithScene会调用Director::startAnimation();启动动画。
void end();//结束,程序释放所有场景
void pause();//暂停运行场景动画运行,帧率也会降到4,节省CPU
void resume();//恢复场景运行
其他管理类
Scheduler *_scheduler; //管理程序中的调度器,Scheduler。
ActionManager *_actionManager; //管理动画
EventDispatcher* _eventDispatcher; //管理事件
TextureCache *_textureCache; //管理纹理,程序中所有的纹理都保存这里面
Layer类
层,在一个场景中可以有多个层,例如游戏场景中的控制按钮为一个层,地图为一个层,这样当地图移动时,只需要地图层移动,控制按钮层则无需要移动。
class Layer : public Node
通常可以直接继承Layer类,添加元素,创建自己的Layer类。Layer类提供了虚函数还处理触摸和按键消息。继承Layer类时可以实现相应的虚函数处理触摸或者按键消息。
class LayerColor : public Layer, public BlendProtocol
纯色背景的层。
class LayerGradient : public LayerColor
渐变色彩的层
class LayerMultiplex : public Layer
有类似场景管理功能的层,可以包含多个层,但是同时只有一个层可以显示,可以通过switchTo切换到其他层。
class Menu : public Layer
菜单层,可以添加菜单按钮,MenuItem对象。
元素
class Sprite : public Node, public TextureProtocol
精灵类,显示图片,动画,可以实现移动、旋转、缩放等。
class MenuItem : public Node
菜单按钮,以下类继承至该类
class CC_DLL MenuItemLabel : publicMenuItem
class CC_DLL MenuItemAtlasFont : publicMenuItemLabel
class CC_DLL MenuItemFont : publicMenuItemLabel
class CC_DLL MenuItemSprite : publicMenuItem
class CC_DLL MenuItemImage : publicMenuItemSprite
class CC_DLL MenuItemToggle : publicMenuItem
class Label : public Node, public LabelProtocol, publicBlendProtocol
标签类,由于OpenGL不支持直接显示文字,所以Label内部会将文字转换成图片进行显示。支持三种方式的标签,1、通过平台的GUI系统生成文字图片;2、通过一张图片包含所需的字母或数字,通常可以使用这种方式显示数字。3、使用Char Map来实现。
cocos2d::ui
UI元素,文本框、按钮、滚动条、选择框、WebView等等。