lua cocos2dx UIManager

仅供新手学习的UIManager 


 

local scheduler = require(cc.PACKAGE_NAME .. ".scheduler")
local UIManager=class("UIManager")
 
local instance=nil 
local _root_view = nil
local _layer_map=nil
local _updateLayer_map=nil
local _layer_zorder=nil
function UIManager:ctor()
	 _layer_map={}
	 _updateLayer_map={}
	 _layer_zorder=0
end

function UIManager:getInstance()
	if instance==nil then
		instance=UIManager.new()
	end
	return instance
end
--创建一个UILayer
function UIManager:addLayer(layer_tag,ZOrder,layer_class,isupdate)
		local _layer_data={}
		_layer_data.layer_tag=layer_tag
		_layer_data.class= layer_class:new()
		self:setZOrad(ZOrder)
		_layer_data.ZOrder=ZOrder
		if isupdate then
	    	_updateLayer_map[layer_tag]=_layer_data
	    else
	  		_layer_map[layer_tag]=_layer_data
	  	end
	    _layer_data.class:setLocalZOrder(ZOrder)
	    local csb_node=self:readCsbNode(layer_class)
	    if  csb_node then
	    	 csb_node:addTo(_layer_data.class)
	    end
	    if _layer_data.class:onCreate() then
	    	_layer_data.class:addTo(_root_view)
	    else
	    	_layer_data.class:addTo(_root_view)
	    end
	    NewHandMgr:getInstance():addUI(layer_tag,layer_class)
	  	
end

function UIManager:readCsbNode(layer_class)
	if layer_class.FILE_NAME then
		local path=layer_class.FILE_NAME
		local csb_node=cc.CSLoader:createNode(path)
		layer_class.resource_node=csb_node
		return csb_node
	end
end


--注册到UILayer上
function UIManager:RegisterGameLayer(root_view)
	_root_view = root_view
end

function UIManager:getLayerByTag(layer_tag)
	if not _layer_map  then
		return
	end 
	if _layer_map[layer_tag]~=nil  then
		return _layer_map[layer_tag].class
	elseif _updateLayer_map[layer_tag]~=nil then
	 	return _updateLayer_map[layer_tag].class
	else
		return
	end
end
--通过layer_tag销毁一个层
function UIManager:destorylayer(layer_tag)
	if not _layer_map  then
		return
	end 
	if _layer_map[layer_tag]~=nil  then
		_layer_map[layer_tag].class:destory()
		_layer_map[layer_tag].class:removeFromParent()
		_layer_map[layer_tag]=nil

	elseif _updateLayer_map[layer_tag]~=nil then
	 	_updateLayer_map[layer_tag].class:destory()
	 	_updateLayer_map[layer_tag].class:removeFromParent()
	 	_updateLayer_map[layer_tag]=nil
	else
		return
	end

end
--设置layer的Zorder
function UIManager:setZOrad(ZOrder)
	if ZOrder==BaseLayerDef.ZORDER_TAG.NORMAL_ZORDER then
		_layer_zorder=_layer_zorder+1
		ZOrder=BaseLayerDef.ZORDER_TAG.NORMAL_ZORDER+_layer_zorder
		return ZOrder	
	else
		return ZOrder
	end
end

--更新数据
function UIManager:update(dt)
	for layer_tag,value in pairs(_updateLayer_map) do
		_updateLayer_map[layer_tag].class:update(dt)
	end
end

function UIManager:onRelease()
	-- for layer_tag,class in pairs(_layer_map) do
	-- 	self:destorylayer(layer_tag)
	-- end
	-- for layer_tag,class in pairs(_updateLayer_map) do
	-- 	self:destorylayer(layer_tag)
	-- end
	_layer_map={}
	_updateLayer_map={}
end

return UIManager






  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值