首页 > 代码库 > Scene

Scene

场景是由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的子类,TransitionScenecreate函数有两个参数,第一个参数表示切换的时间,第二个参数是要进入的场景
例如:director->replaceScene(TransitionSlideInT::create(3.0f, SecondScene::createScene()));

Scene