Scene

Posted lion_witcher

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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的主要内容,如果未能解决你的问题,请参考以下文章

第4次作业类测试代码+142+王娇

javafx中已经创建的scene的宽高能改变吗?怎么改呢?

three.js控制台错误“scene.getObjectByName(...)未定义”但一切似乎都没问题?

JavaFX Scene Builder 怎么用???

Libgdx scene2d中的BitmapFont动画

Java实验九第一题