窗口管理器(一)

刚踏进游戏行业时,看到大神们写的窗口管理器觉得很是牛逼,后面自己也逐渐的踏上了这条路。到目前为止写了不少窗口管理器了,不同游戏需求也不一样。

简版窗口管理器,适合棋牌类,没有窗口模版和父子窗口(标签)

版本:cocos2dx+lua v3.16 

配置读取,适合给策划配置。好吧,目前没策划,自己动手,丰衣足食。

WindowData.lua

local WindowData = {

--[[

[winId] = { -- 样例

layerName                    = 窗口文件路径,

isOpenGestureCloseWindowFunc = 是否开启手势关闭窗口功能,

isCloseWhenClickOutside      = 点击窗口外面是否关闭窗口(默认点击窗口外关闭),

openWindowActionType        = 打开窗口时的动画类型(查看Const.lua文件中的类型),

closeWindowActionType        = 关闭窗口时的动画类型,

isOnlyOneWindow              = 窗口是否只能存在一个,

isCacheWindow                = 窗口是否缓存,

// 具体需要哪些控制数据自己添加

},

--]]

}

return WindowData


WindowConfig.lua

local WindowData = require("app.data.WindowData")

local WinCfg = {}

-- 窗口的Z轴

WinCfg.Z_ORDER_NORMAL            = 1  -- 普通窗口

WinCfg.Z_ORDER_CONFIRM_BOX      = 2  -- 确认框

WinCfg.Z_ORDER_ALERT            = 7  -- 警告框

WinCfg.Z_ORDER_NET_LOCK          = 8  -- 网络锁

WinCfg.Z_ORDER_NET_RECONNECT    = 9  -- 网络掉线重连窗口

local Z_ORDERS = nil -- Z轴配置,具体查看WinCfg:getZOrder函数

local CFGS = {}

local count = 0

local function getCount()

count = count + 1

return count

end

--[[

-- 函数说明: 增加一个窗口配置

-- 参数说明: winId: 窗口ID

-- 参数说明: layerName: 窗口文件路径

]]

local function addCfg(winId, layerName)

winId = winId or getCount()

local winCfg = {}

winCfg.winId    = winId

winCfg.layerName = layerName

-- 读取配置文件(本来这里是放到窗口模版里面动态读取的,简版嘛,不需要太复杂的功能)

local DATA = WindowData[winId]

if(DATA ~= nil) then

winCfg.isOpenGestureCloseWindowFunc = DATA.isOpenGestureCloseWindowFunc

winCfg.isCloseWhenClickOutside      = DATA.isCloseWhenClickOutside

winCfg.openWindowActionType        = DATA.openWindowActionType

winCfg.closeWindowActionType        = DATA.closeWindowActionType

winCfg.isOnlyOneWindow              = DATA.isOnlyOneWindow

winCfg.isCacheWindow                = DATA.isCacheWindow

if((layerName == nil) or (layerName == "")) then -- 首选当前文件的配置

winCfg.layerName = DATA.layerName

end

end

CFGS[winId] = winCfg

return winId

end

--[[

-- 函数说明: 获取窗口配置

-- 参数说明: winId: 窗口ID

]]

function WinCfg:getCfg(winId)

return winId and CFGS[winId] or nil

end

--[[

-- 函数说明: 获取窗口的Z轴

]]

function WinCfg:getZOrder(winId)

if(not Z_ORDERS) then

Z_ORDERS = {

[WinCfg.PANEL_CONFIRM_BOX]  = WinCfg.Z_ORDER_CONFIRM_BOX,  -- 确认框

[WinCfg.PANEL_ALERT]        = WinCfg.Z_ORDER_ALERT,        -- 警告框

[WinCfg.PANEL_NET_LOCK]      = WinCfg.Z_ORDER_NET_LOCK,      -- 网络锁

[WinCfg.PANEL_NET_RECONNECT] = WinCfg.Z_ORDER_NET_RECONNECT, -- 网络掉线重连

}

end

return winId and Z_ORDERS[winId] or WinCfg.Z_ORDER_NORMAL

end

-- 命名规则: 一级窗口使用[PANEL_***]的形式,二级窗口使用[LAYER_***]的形式(目前还没有二级窗口的需求,所以都使用PANEL_***)

-- 窗口ID规则: 1(保留字段)*100000 + 场景类型(公用类型=0)*10000 + 本场景下的模块索引*100 + 窗口索引

--=============================================================

--========================= 公用窗口 ===========================

--=============================================================

WinCfg.PANEL_CONFIRM_BOX  = addCfg(100001) -- 确认框

WinCfg.PANEL_ALERT        = addCfg(100002) -- 警告框

WinCfg.PANEL_NET_LOCK      = addCfg(100003) -- 网络锁

WinCfg.PANEL_NET_RECONNECT = addCfg(100004) -- 网络掉线重连

--=============================================================

--========================= 登录窗口 ===========================

--=============================================================

WinCfg.PANEL_STOP_SERVICE_BULLETIN_PANEL = addCfg(200001) -- 停服公告

return WinCfg


难得清闲,先下班了...

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 有一种感动,叫做忘川,有一种相思,叫做人生再见,希望多渺茫,人生多难忘。人情是一种缘,人心是一种梦,爱有多浓,人有...
    420_c644阅读 416评论 0 0
  • 我知道现在不是惆怅的时候,也知道现在恰好属于一个拼搏的时代,但是总是莫名的为自己的不努力而惋惜,为自己失去的时间惋...
    OO碰到OO阅读 148评论 0 0
  • 六月未央,秀柳成荫,槐花挂满枝头,清风徐起,缕缕飘香,透出浓浓夏意,令人树影下沉醉,抚一把折纸乾坤扇,握一支翰...
    青果无心阅读 275评论 0 0
  • The buttons on your collar The color of your hair I think...
    Arrietty阅读 330评论 0 0