-
-
Notifications
You must be signed in to change notification settings - Fork 77
场景转换(SceneTransition)
YHH edited this page Mar 13, 2022
·
1 revision
每一款游戏都需要过渡效果来打造精致的外观和感觉。使用框架,可以在场景之间以及场景内进行变换。
过渡通常有两个阶段:第一阶段过渡将使用前一场景的渲染遮住屏幕,加载新场景,然后从旧渲染过渡到新场景的渲染,并产生效果(例如,将旧渲染滑出屏幕)。第二阶段过渡将首先执行过渡效果,然后加载新场景,然后过渡到显示新场景(例如,淡入黑色、加载新场景、淡入新场景)。不管怎样,过程都非常相似。
- 继承
SceneTransition
- 如果您使用的是特效或者贴图,请将其加载到构造函数中,以便随时使用
-
render
方法在每一帧中都被调用,以便您可以控制最终的渲染输出。您可以在两部分转换中使用_isNewSceneLoaded
标志来确定您是在第一阶段还是第二阶段。 - 重写
onBeginTransition
。此方法将构成大部分过渡代码。它在一个协程中被调用。- 调用来加载下一个场景:
yield Core.StartCoroutine(this.LoadNextScene())
。请注意,必须调用该方法。框架将负责正确设置_isNewSceneLoaded
标志 - 执行您的过渡(例如,淡出之前的场景渲染以显示新场景)
- 调用
transitionComplete
这将结束过渡 - 卸载您使用的所有效果/纹理。 或者,您可以重写
transitionComplete
并在那里进行卸载
- 调用来加载下一个场景:
export class SuperTransition extends es.SceneTransition {
/**
* 构造函数
* 请注意,对于场景内转换,sceneLoadAction 可以为 null,并且一切仍将按预期工作。
* @param sceneLoadAction
*/
public constructor(sceneLoadAction: () => es.Scene )
{
super(sceneLoadAction);
// 加载效果
}
public* onBeginTransition()
{
// 加载新场景。 如果sceneLoadAction 为null,这只会将_isNewSceneLoaded 标志设置为true。
yield es.Core.startCoroutine( this.LoadNextScene() );
// 使用我们的纹理/特效 过渡到新场景
// 通过调用让 SceneTransition 知道我们都完成了,它可以清理自己并停止调用渲染
this.transitionComplete();
// 卸载我们的纹理/特效
}
public render( )
{
// 在这里处理纹理/特效的效果变换
}
}