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
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
相关文章推荐
- cocos2dx lua Sprite和ImageView切换图片
- cocos2dx 3.12在android studio上从配置到真机运行
- 使用cocos创建的项目,如何进行源码调试?
- 基本控件使用(二)(ScrollView,TableView)
- cocos2dx学习之路----第八篇(初识触摸机制中的单点触摸)
- cocos2dx 在Xcode里面 resource 里面文件夹的搜索
- 关于Cocos2d-x中让主角运动的方法
- cocos2d - JS 工具 - Rect可视化
- cocos2d - JS 屏幕滚动效果
- cocos creator -- 指定自定义事件
- cocos2d-js官方文档 cc.loader
- 使用XCode6.0.1将Cocos2d-x3.1工程打包ipa(支持iOS8)
- 关于cocos2dx虚拟摇杆的lua实现
- cocos2dx-lua制作游戏五维图
- Cocos2dx 截屏功能 3.2以上版本
- cocos2dx C++绑定lua
- Cocos2d-x优化中关于背景图片优化
- cocos2dx3.x物理引擎的碰撞检测
- cocos2d-android - 1.地图动态加载原理(世界地图的实现)
- Cocos Creator脚本开发(一)