美文网首页cocos2dx+lua
窗口管理器(一)

窗口管理器(一)

作者: maikesen | 来源:发表于2018-03-14 18:36 被阅读0次

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

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

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

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

相关文章

  • 新的玩具:Windows上的awesome

    平铺式窗口管理器 基于xwindow(Linux/Unix采用的图形系统)有成千上百种窗口管理器。其中有一类窗口管...

  • Linux 如何利用多工作区来提升效率/Xfce4

    使用多窗口管理器(堆栈式)时,当在一屏打开多个应用时(浏览器窗口、聊天窗口、文件管理器、邮件客户端、文档操作),桌...

  • 窗口管理器(一)

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

  • tkinter 布局管理

    1 布局管理器 布局管理器是负责管理各组件的大小和位置的。此外,当用户调整窗口大小后,布局管理器还会自动调整窗口中...

  • 窗口管理器和X协议

    XFree86、X11、X-window、窗口管理器、GNOME、KDE的关系窗口管理器和桌面环境是用户在X Wi...

  • Android ANR

    ANR 定义Application Not Responding。在Android中,活动管理器和窗口管理器这两个...

  • VS2013中属性管理器不见了的解决方法

    不用慌张,只要点击 “视图” -> “其他窗口” -> “属性管理器(M)” ,属性管理器就出来了。

  • 试试动态窗口管理器 dwm 吧

    如果你崇尚效率和极简主义,并且正在为你的 Linux 桌面寻找新的窗口管理器,那么你应该尝试一下动态窗口管理器(d...

  • fvwm模仿plan9窗口管理器

    用fvwm实现最简单的窗口管理器功能。用键盘完成所有窗口操作。没有窗口标题栏,没有任务栏。桌面上只有一个一个的窗口...

  • 电脑运行卡顿?六个方法打开任务管理器解决

    方法一:运行打开任务管理器命令 打开“运行”窗口(Win10打开“运行”窗口的方法汇总),在其中输入命令 task...

网友评论

    本文标题:窗口管理器(一)

    本文链接:https://www.haomeiwen.com/subject/xrixqftx.html