tolua 框架 场景管理BaseScene
发表于2018-09-16
场景管理主要是资源的释放比较重要。不多说看代码。我设想是每个场景也算是一个模块通过事件通信。BaseScene主要做的事情是进入场景,退出场景(场景动画)释放资源。
场景跳转设想:
1.跳转场景
2.加载本场景需要的资源
3.释放场景资源
local BaseScene = class("BaseScene",require("Base.BaseMediator")) function BaseScene:ctor(SceneType) BaseScene.super.ctor(self) self.SceneName = SceneType end
--进入场景
function BaseScene:Enter( ) self:_LoadScene() end
--加载(跳转)场景
function BaseScene:_LoadScene( )
--跳转场景
if self.SceneName ~= nil then AutoFade.Instance:LoadLevel(self.SceneName) end end
--加载场景数据 : 子类重写
function BaseScene:LoadSceneData( ) end
--离开场景:注意父类
function BaseScene:Exit()
--清空场景里面的东西
UIManager:Instance():Clear() --UIManager-->调用所有子panel.Close() MediatorManager:Instance():Clear()---先调用子mediator:Exit() PrefabsPool:Instance():Clear()---清空NoForever BaseScene.super.Exit(self)---主要移除 AUTO_FADE_SCENE 事件 end return BaseScene
使用:
local MainScene = class("MainScene",require("Base.BaseScene"))
--构造函数
function MainScene:ctor( ) MainScene.super.ctor(self, MAIN_SCENE) end
--初始化
function MainScene:Init( ) end
--监听事件
function MainScene:Notification( ) return { AUTO_FADE_SCENE } end
--事件处理 evt
function MainScene:ProcessEvent(evt,parm) if evt == AUTO_FADE_SCENE then MainScene:LoadSceneData() end end
--加载场景数据
function MainScene:LoadSceneData( ) local call = handler(self,self.LoadAssetCallback) LoadAssetForLua("MainPanel","MainPanel",call) end function MainScene:LoadAssetCallback( obj ,parm ) if obj.name == "MainPanel" then PrefabsPool:Instance():AddAsset(obj)
--显示主界面
MediatorManager:Instance():AddMediator(MediatorType.MainMediator,MainNotice.Show) end end
--mediator退出处理
function MainScene:Exit( )
--调用父类的Exit
MainScene.super.Exit(self) end return MainScene
来自:https://blog.csdn.net/u010665359/article/details/51116055