场景是由director来控制管理的, Director用来管理的函数:
/** * 设置场景,然后进入Director类的主循环; * 当已经有场景在运行时,请不要调用该函数; * 调用该函数去设置程序的第一个场景; * 该函数内部,会调用pushScene;之后会调用startAnimation函数。 */ void runWithScene(Scene *scene); /** * 将当前运行的场景压入场景栈中,并挂起当前运行的场景; * 同时运行参数中传入的新的场景。 * 注:请避免在场景栈中存放太多的场景,这样有可能占用过多的内存资源; * 只有当前有正在运行的场景时,才可以调用该函数。 */ void pushScene(Scene *scene); /** * 从场景栈中弹出一个场景,并使用该场景替换正在运行的场景; * 当前正在运行的场景会被释放掉。如果在场景栈中没有场景时,程序就会终 止。 * 只有当前有正在运行的场景才可以调用该函数。 */ void popScene(); /** * 内部调用popToSceneStackLevel(1)完成。 */ void popToRootScene(); /** * 从场景栈中弹出指定位置之前的所有场景; * 如果参数level等于0,直接调用end()函数,结束director; * 如果参数level等于1,弹出除了根场景外的所有场景; * 如果参数level大于当前栈中场景数量,什么都不会发生。 */ void popToSceneStackLevel(int level); /** * 使用参数的场景替换当前正在运行的场景。当前正在运行的场景会被释放掉。 * 只有当前有正在运行的场景时,才可以调用该函数。 */ void replaceScene(Scene *scene); /** * 结束程序,释放当前正在运行的场景 * 但是这个函数并没有从它的父对象中删除OpenGL view。我们需要手动的去删除这个对象。 */ void end(); /** * 暂停当前正在运行的场景; * 所有的调度器都会被暂停; * 当暂停时,为了减少CPU消耗,场景绘制的帧率是每秒4帧。 */ void pause(); /** * 唤醒停止的场景 * 调度器会被重新激活,开始事件调度 */ void resume(); /** * 停止所有动画,任何内容都不会被再绘制。Director类中的主循环将处于停止状态 * 如果不想暂停动画效果,可以调用pause函数。 */ virtual void stopAnimation() = 0; /** * 重新出发Director类中的主循环 * 只有在stopAnimation被调用过后,才可以调用该函数用来恢复主循环 * 在程序初始化时,请不要手动调用该函数来触发主循环,而是调用runWithScene函数 */ virtual void startAnimation() = 0; /** * 该函数被用来绘制场景。 * 这个函数在每一帧的时候,都会被调用; * 注:请不要手动调用该函数。 */ void drawScene();
*******************场景的切换**************切换效果类都是类TransitionScene
的子类,TransitionScene
的create
函数有两个参数,第一个参数表示切换的时间,第二个参数是要进入的场景例如:director->replaceScene(TransitionSlideInT::create(3.0f, SecondScene::createScene()));
时间: 2024-11-11 08:34:10