3.1 CCDirector:大总管
bool AppDelegate::applicationDidFinishLaunching() {
-
//初始化导演类
-
CCDirector *pDirector = CCDirector::sharedDirector();
-
pDirector-]]>setOpenGLView(&CCEGLView::sharedOpenGLView());
-
//高分辨率屏幕(例如 Retina 屏幕)的资源管理
-
//pDirector-]]>enableRetinaDisplay(true);
-
//启用 FPS 显示
-
pDirector-]]>setDisplayStats(true);
-
//设置 FPS 上限。如果不加设置,则默认 FPS 上限为 60
-
pDirector-]]>setAnimationInterval(1.0 / 60);
-
//创建一个场景,场景是一个 autorelease 对象
-
CCScene *pScene = HelloWorld::scene();
-
//运行场景
-
pDirector-]]>runWithScene(pScene);
return true;
-
总而言之,游戏在CCDirector的管理下完成了呈现设定与流程控制。
-
CCDirector扮演着全局大总管的角色,因而很自然地采用了单例的设计模式。在程序的任何地方,都可以通过下面的简单 代码访问到:
-
CCDirector *pDirector = CCDirector::sharedDirector();
-
在CCDirector中,我们定义了以下管理场景的方法。
-
runWithScene(CCScene*scene):启动游戏,并运行scene场景。这个方法在主程序启动时第一次启动主场景时调用。
-
replaceScene(CCScene*scene):直接使用传入的scene替换当前场景来切换画面,当前场景将被释放。这是切换场景时 最常用的方法。
-
pushScene(CCScene*scene):将当前运行中的场景暂停并压入到代执行场景栈中,再将传入的scene设置为当前运行场景。
-
popScene:释放当前场景,再从代执行场景栈中弹出栈顶的场景,并将其设置为当前运行场景。如果栈为空,则直接结束 应用。与 pushScene 成对使用,可以达到形如由主界面进入设置界面,然后回到主界面的效果。
-
pause:暂停当前运行场景中的所有计时器和动作,场景仍然会显示在屏幕上。
-
resume:恢复当前运行场景中被暂停的计时器和动作。它与pause配合使用。
-
end:结束场景,同时退出应用。
-
void addChild(CCNode* child);
-
void addChild(CCNode* child, int zOrder);
-
void addChild(CCNode* child, int zOrder, int tag);
-
其中child参数为将要添加的节点。对于场景而言,通常我们添加的节点就是层。先添加的层会被置于后添加的层之下。 如果想要为它们指定先后次序,可以使用不同的 zOrder 值,zOrder 代表了该节点下元素的先后次序,值越大则显示顺序越 靠上。zOrder 的默认值为 0。tag 是元素的标识号码,如果为子节点设置了 tag 值,就可以在它的父节点中利用 tag 值找到 它了。这里我们可以选择自己需要的方法来向场景中添加层。CCLayer的另一个十分重要的功能是可以接受用户输入事件,包括触摸、加速度计和键盘输入等。CCLayer中与用户输入事 件相关的成员如表 3-1 所示。
成员类型 |
名称 |
描述 |
属性 |
TouchEnabled |
获取或设置是否接受触摸事件 |
|
AccelerometerEnabled |
获取或设置是否接受加速度计事件 |
|
KeypadEnabled |
获取或设置是否启用键盘输入支持 |
回调函数 |
ccTouchBegan |
带目标的触摸事件的回调函数 |
|
ccTouchMoved |
|
|
ccTouchEnded |
|
|
ccTouchCancelled |
|
|
ccTouchesBegan |
标准触摸事件的回调函数 |
|
ccTouchesMoved |
|
|
ccTouchesEnded |
|
|
ccTouchesCancelled |
|
|
registerWithTouchDispatcher |
注册触摸事件的回调函数, |
|
didAccelerate |
加速度计改变事件的回调函数 |