窗口管理器(一)

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

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

版本: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


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

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,772评论 6 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,458评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,610评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,640评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,657评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,590评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,962评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,631评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,870评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,611评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,704评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,386评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,969评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,944评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,179评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,742评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,440评论 2 342

推荐阅读更多精彩内容

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