Skip to content

场景转换(SceneTransition)

YHH edited this page Mar 13, 2022 · 1 revision

SceneTransition

每一款游戏都需要过渡效果来打造精致的外观和感觉。使用框架,可以在场景之间以及场景内进行变换。

自定义过渡

过渡通常有两个阶段:第一阶段过渡将使用前一场景的渲染遮住屏幕,加载新场景,然后从旧渲染过渡到新场景的渲染,并产生效果(例如,将旧渲染滑出屏幕)。第二阶段过渡将首先执行过渡效果,然后加载新场景,然后过渡到显示新场景(例如,淡入黑色、加载新场景、淡入新场景)。不管怎样,过程都非常相似。

制作过程

  • 继承 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( )
	{
		// 在这里处理纹理/特效的效果变换
	}
}
Clone this wiki locally