• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

2. Unity3d Lua框架 - xLua - UpdateManager

原作者: [db:作者] 来自: [db:来源] 收藏 邀请
  1. UpdateManager.lua
--[[
-- 更新管理,负责Unity侧Update、LateUpdate、FixedUpdate对Lua脚本的调用
-- 注意:
-- 1、别直接用tolua的UpdateBeat、LateUpdateBeat、FixedUpdateBeat,所有需要以上三个更新函数的脚本,都从这里注册。
-- 2、tolua的event没有使用weak表,直接使用tolua的更新系统会导致脚本被event持有引用而无法释放---除非每次都记得手动去释放
--]]

local Messenger = require "Framework.Common.Messenger"
local UpdateManager = BaseClass("UpdateManager", Singleton)
local UpdateMsgName = "Update"
local LateUpdateMsgName = "LateUpdateMsgName"
local FixedUpdateMsgName = "FixedUpdateMsgName"

-- 构造函数
local function __init(self)
	-- 成员变量
	-- 消息中心
	self.ui_message_center = Messenger.New()
	-- Update
	self.__update_handle = nil
	-- LateUpdate
	self.__lateupdate_handle = nil
	-- FixedUpdate
	self.__fixedupdate_handle = nil
end

-- Update回调
local function UpdateHandle(self)
	self.ui_message_center:Broadcast(UpdateMsgName)
end

-- LateUpdate回调
local function LateUpdateHandle(self)
	self.ui_message_center:Broadcast(LateUpdateMsgName)
end

-- FixedUpdate回调
local function FixedUpdateHandle(self)
	self.ui_message_center:Broadcast(FixedUpdateMsgName)
end

-- 启动
local function Startup(self)
	self:Dispose()
	self.__update_handle = UpdateBeat:CreateListener(UpdateHandle, UpdateManager:GetInstance())
	self.__lateupdate_handle = LateUpdateBeat:CreateListener(LateUpdateHandle, UpdateManager:GetInstance())
	self.__fixedupdate_handle = FixedUpdateBeat:CreateListener(FixedUpdateHandle, UpdateManager:GetInstance())
	UpdateBeat:AddListener(self.__update_handle)
	LateUpdateBeat:AddListener(self.__lateupdate_handle)
	FixedUpdateBeat:AddListener(self.__fixedupdate_handle)
end

-- 释放
local function Dispose(self)
	if self.__update_handle ~= nil then
		UpdateBeat:RemoveListener(self.__update_handle)
		self.__update_handle = nil
	end
	if self.__lateupdate_handle ~= nil then
		LateUpdateBeat:RemoveListener(self.__lateupdate_handle)
		self.__lateupdate_handle = nil
	end
	if self.__fixedupdate_handle ~= nil then
		FixedUpdateBeat:RemoveListener(self.__fixedupdate_handle)
		self.__fixedupdate_handle = nil
	end
end

-- 清理:消息系统不需要强行清理
local function Cleanup(self)
end

-- 添加Update更新
local function AddUpdate(self, e_listener)
	self.ui_message_center:AddListener(UpdateMsgName, e_listener)
end

-- 添加LateUpdate更新
local function AddLateUpdate(self, e_listener)
	self.ui_message_center:AddListener(LateUpdateMsgName, e_listener)
end

-- 添加FixedUpdate更新
local function AddFixedUpdate(self, e_listener)
	self.ui_message_center:AddListener(FixedUpdateMsgName, e_listener)
end

-- 移除Update更新
local function RemoveUpdate(self, e_listener)
	self.ui_message_center:RemoveListener(UpdateMsgName, e_listener)
end

-- 移除LateUpdate更新
local function RemoveLateUpdate(self, e_listener)
	self.ui_message_center:RemoveListener(LateUpdateMsgName, e_listener)
end

-- 移除FixedUpdate更新
local function RemoveFixedUpdate(self, e_listener)
	self.ui_message_center:RemoveListener(FixedUpdateMsgName, e_listener)
end

-- 析构函数
local function __delete(self)
	self:Cleanup()
	self.ui_message_center = nil
end

UpdateManager.__init = __init
UpdateManager.Startup = Startup
UpdateManager.Dispose = Dispose
UpdateManager.Cleanup = Cleanup
UpdateManager.AddUpdate = AddUpdate
UpdateManager.AddLateUpdate = AddLateUpdate
UpdateManager.AddFixedUpdate = AddFixedUpdate
UpdateManager.RemoveUpdate = RemoveUpdate
UpdateManager.RemoveLateUpdate = RemoveLateUpdate
UpdateManager.RemoveFixedUpdate = RemoveFixedUpdate
UpdateManager.__delete = __delete
return UpdateManager;

支付宝捐赠


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
Mac OS X 上Lua的安装方法发布时间:2022-07-22
下一篇:
golang lua使用示例发布时间:2022-07-22
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap