您的位置:首页 > 移动开发 > Cocos引擎

lua cocos2dx UIManager

2016-07-26 16:56 423 查看
仅供新手学习的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

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: