tolua 框架 场景管理BaseScene

发表于2018-09-16
评论0 876浏览

想免费获取内部独家PPT资料库?观看行业大牛直播?点击加入腾讯游戏学院游戏程序行业精英群

711501594
场景管理主要是资源的释放比较重要。不多说看代码。我设想是每个场景也算是一个模块通过事件通信。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

原文链接

著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

如社区发表内容存在侵权行为,您可以点击这里查看侵权投诉指引

游戏学院公众号二维码
腾讯游戏学院
微信公众号

提供更专业的游戏知识学习平台