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`。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Lua 复制代码
---@class NormalSceneLoad:BaseSceneLoad
---@field _sceneAsync SceneLoader
---@field _loadingScene SceneLoader
local NormalSceneLoad = class("NormalSceneLoad", BaseSceneLoad)

function NormalSceneLoad:initialize()
    BaseSceneLoad.initialize(self)
    self._isDispose = false
end

function NormalSceneLoad:getLoaderType()
    return SceneEnum.sceneType.unity
end

function NormalSceneLoad:startLoadingScene(curScene)
    self._loadingScene = g.loaderManager:loadSceneAsync("Scenes/LoadingScene.unity")
end

function NormalSceneLoad:disposeLoadingScene()
    if self._loadingScene then
        if g.isDestroyed then
            self._loadingScene:sceneReleaseBase()
        else
            self._loadingScene:release()
        end
        self._loadingScene = nil
    end
end
---@return boolean
function NormalSceneLoad:isLoadingSceneReady()
    return self._loadingScene.isComplete
end
---@return number
function NormalSceneLoad:getLoadingSceneProgress()
    return self._loadingScene:getProgress()
end

function NormalSceneLoad:startPreLoadNewScene(curScene)
    self._sceneAsync = curScene:loadUnitySceneAsync()
end

function NormalSceneLoad:getScenePrefab()
end

---@return boolean
function NormalSceneLoad:isNewSceneLoadReady()
    return self._sceneAsync.isComplete
end
---@return number
function NormalSceneLoad:getNewSceneLoadProgress()
    return self._sceneAsync:getProgress()
end

function NormalSceneLoad:onLoadingPanelOpen()
end

function NormalSceneLoad:onSceneEnterForeground()
end

function NormalSceneLoad:dispose()
    if self._isDispose then
        return
    end
    self._isDispose = true
    self:disposeLoadingScene()
    if self._sceneAsync then
        if g.isDestroyed then
            self._sceneAsync:sceneReleaseBase()
        else
            self._sceneAsync:release()
        end
        self._sceneAsync = nil
    end
end

-- 完全释放前处理
function NormalSceneLoad:destoryPreDispose()
end 

-- 完全释放
function NormalSceneLoad:destoryDispose()
end

return NormalSceneLoad
相关推荐
为何创造硅基生物4 小时前
C语言 结构体内存对齐规则(通俗易懂版)
c语言·开发语言
吃好睡好便好4 小时前
在Matlab中绘制横直方图
开发语言·学习·算法·matlab
星寂樱易李5 小时前
iperf3 + Python-- 网络带宽、网速、网络稳定性
开发语言·网络·python
仰泳之鹅5 小时前
【C语言】自定义数据类型2——联合体与枚举
c语言·开发语言·算法
之歆5 小时前
DAY_12JavaScript DOM 完全指南(二):实战与性能篇
开发语言·前端·javascript·ecmascript
cen__y6 小时前
Linux12(Git01)
linux·运维·服务器·c语言·开发语言·git
AI人工智能+电脑小能手6 小时前
【大白话说Java面试题 第65题】【JVM篇】第25题:谈谈对 OOM 的认识
java·开发语言·jvm
社交怪人7 小时前
【算平均分】信息学奥赛一本通C语言解法(题号2071)
c语言·开发语言
郭涤生8 小时前
不同主机之间网络通信-以太网连接复习
开发语言·rk3588
山居秋暝LS8 小时前
【无标题】RTX00安装paddle OCR,win11不能装最新的,也不能用GPU
开发语言·r语言