您的位置:首页 > 财经 > 金融 > lua 游戏架构 之 SceneLoad场景加载(二)

lua 游戏架构 之 SceneLoad场景加载(二)

2024/11/16 11:14:22 来源:https://blog.csdn.net/heyuchang666/article/details/140560741  浏览:    关键词:lua 游戏架构 之 SceneLoad场景加载(二)

设计上 定义 `NormalSceneLoad`的类,该类继承自`BaseSceneLoad`。

lua 游戏架构 之 SceneLoad场景加载(一)-CSDN博客文章浏览阅读48次。设计一个为`BaseSceneLoad` class,用于处理场景加载的相关操作 ,主要作用是提供了一个通用的场景加载框架https://blog.csdn.net/heyuchang666/article/details/140560014?spm=1001.2014.3001.5501

`NormalSceneLoad`类主要用于处理普通场景的加载和释放。

1. 定义类:`NormalSceneLoad = class("NormalSceneLoad", BaseSceneLoad)`

2. 初始化函数:`function NormalSceneLoad:initialize()`

   这个函数用于初始化`NormalSceneLoad`类的实例。它调用了基类的`initialize`函数,并设置了一个标志位`self._isDispose`为`false`。

3. 获取加载器类型:`function NormalSceneLoad:getLoaderType()`

   这个函数返回`SceneEnum.sceneType.unity`,表示该类加载器加载的类型为Unity场景。

4. 开始加载场景:`function NormalSceneLoad:startLoadingScene(curScene)`

   这个函数用于开始加载场景。它首先调用基类的`startLoadingScene`函数,然后创建一个异步加载场景的实例`self._loadingScene`。

5. 释放加载场景:`function NormalSceneLoad:disposeLoadingScene()`

   这个函数用于释放加载的场景。它首先检查`self._loadingScene`是否为`nil`,如果不是,则调用`release`或`sceneReleaseBase`函数释放场景。

6. 检查加载场景是否准备就绪:`---@return boolean`

   这个函数用于检查加载的场景是否已经准备就绪。它返回`self._loadingScene.isComplete`,即异步加载场景的完成状态。

7. 获取加载场景的进度:`---@return number`

   这个函数用于获取加载的场景的进度。它返回`self._loadingScene:getProgress()`,即异步加载场景的进度值。

8. 开始预加载新场景:`function NormalSceneLoad:startPreLoadNewScene(curScene)`

   这个函数用于开始预加载新场景。它首先调用`curScene:loadUnitySceneAsync()`函数,创建一个异步加载新场景的实例`self._sceneAsync`。

9. 获取新场景的预加载进度:`return number`

   这个函数用于获取新场景的预加载进度。它返回`self._sceneAsync:getProgress()`,即异步加载新场景的进度值。

10. 打开加载面板:`function NormalSceneLoad:onLoadingPanelOpen()`

    这个函数用于在加载场景时打开加载面板。

11. 场景进入前台:`function NormalSceneLoad:onSceneEnterForeground()`

    这个函数用于在场景进入前台时执行。

12. 释放:`function NormalSceneLoad:dispose()`

    这个函数用于释放`NormalSceneLoad`类的实例。它首先检查`self._isDispose`是否为`true`,如果是,则直接返回。否则,调用`disposeLoadingScene`和`destoryPreDispose`函数释放场景和处理前释放。

13. 销毁前释放:`function NormalSceneLoad:destoryPreDispose()`

    这个函数用于在销毁前释放`NormalSceneLoad`类的实例。它首先检查`self._isDispose`是否为`true`,如果是,则直接返回。否则,调用`dispose`函数释放场景和处理前释放。

14. 销毁释放:`function NormalSceneLoad:destoryDispose()`

    这个函数用于在销毁时释放`NormalSceneLoad`类的实例。它首先检查`self._isDispose`是否为`true`,如果是,则直接返回。否则,调用`dispose`函数释放场景和处理前释放。

---@class NormalSceneLoad:BaseSceneLoad
---@field _sceneAsync SceneLoader
---@field _loadingScene SceneLoader
local NormalSceneLoad = class("NormalSceneLoad", BaseSceneLoad)function NormalSceneLoad:initialize()BaseSceneLoad.initialize(self)self._isDispose = false
endfunction NormalSceneLoad:getLoaderType()return SceneEnum.sceneType.unity
endfunction NormalSceneLoad:startLoadingScene(curScene)self._loadingScene = g.loaderManager:loadSceneAsync("Scenes/LoadingScene.unity")
endfunction NormalSceneLoad:disposeLoadingScene()if self._loadingScene thenif g.isDestroyed thenself._loadingScene:sceneReleaseBase()elseself._loadingScene:release()endself._loadingScene = nilend
end
---@return boolean
function NormalSceneLoad:isLoadingSceneReady()return self._loadingScene.isComplete
end
---@return number
function NormalSceneLoad:getLoadingSceneProgress()return self._loadingScene:getProgress()
endfunction NormalSceneLoad:startPreLoadNewScene(curScene)self._sceneAsync = curScene:loadUnitySceneAsync()
endfunction NormalSceneLoad:getScenePrefab()
end---@return boolean
function NormalSceneLoad:isNewSceneLoadReady()return self._sceneAsync.isComplete
end
---@return number
function NormalSceneLoad:getNewSceneLoadProgress()return self._sceneAsync:getProgress()
endfunction NormalSceneLoad:onLoadingPanelOpen()
endfunction NormalSceneLoad:onSceneEnterForeground()
endfunction NormalSceneLoad:dispose()if self._isDispose thenreturnendself._isDispose = trueself:disposeLoadingScene()if self._sceneAsync thenif g.isDestroyed thenself._sceneAsync:sceneReleaseBase()elseself._sceneAsync:release()endself._sceneAsync = nilend
end-- 完全释放前处理
function NormalSceneLoad:destoryPreDispose()
end -- 完全释放
function NormalSceneLoad:destoryDispose()
endreturn NormalSceneLoad

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com