以前讲过cocos-lua的状态机组件
传送门1: http://www.jianshu.com/p/cd5821fa8ebd
传送门2: http://www.jianshu.com/p/fb53c90ccc49
传送门3: http://www.jianshu.com/p/5ec3dfd895ec
传送门4: http://www.jianshu.com/p/1493194e59ed
今天我们要讲个简单的状态机
直接上代码 看注释
--[[--设置家族加入按钮状态 自动 禁用 已满等
--使用样例
g_setAddHhBtnState({
--控件
addBtn = args.addBtn, --加入按钮 下面有3个文本子控件
applyBtn = args.applyBtn, --申请按钮
--值
joinType = args.joinType, --服务器传过来的加入家族审核状态
nMyPlayerLv = args.nMyPlayerLv, --自己的家族等级
nNeedPlayerLv = args.nNeedPlayerLv, --该家族设置的准入等级
nCurMemNum = args.nCurMemNum,--当前成员数量
nMaxMemNum = args.nMaxMemNum,--最大成员数量
guildId = args.guildId, --公会id
})
]]
function g_setAddHhBtnState(args)--把需要形成状态的控件和值放到一个表里面传进来
--dump(args, "设置家族加入按钮状态")
--这里用自己的变量把表里面的变量存起来 方便以后改需求时维护
--控件
local addBtn = args.addBtn
local applyBtn = args.applyBtn
--值
local joinType = args.joinType
local nMyPlayerLv = args.nMyPlayerLv
local nNeedPlayerLv = args.nNeedPlayerLv
local nCurMemNum = args.nCurMemNum
local nMaxMemNum = args.nMaxMemNum
local guildId = args.guildId
local m_Label_JoinHh = g_seekWidgetByName(addBtn, "m_Label_JoinHh")--加载部分子控件
local m_Label_NoOpen = g_seekWidgetByName(addBtn, "m_Label_NoOpen")
local m_Label_LevelLimit = g_seekWidgetByName(addBtn, "m_Label_LevelLimit")
--这里就是根据条件创造出不同的状态
--如果需求发生改变 可以直接在这里改条件导致状态的逻辑
local btnState = MsgHhData.ADDHH_REFUSE--默认给个拒绝先
if nCurMemNum >= nMaxMemNum then--已满
btnState = MsgHhData.ADDHH_MEMMAX
else
if joinType == GameConst.GUILD_APPLY_REFUSE then--拒绝
btnState = MsgHhData.ADDHH_REFUSE
elseif joinType == GameConst.GUILD_APPLY_APPROVE then--批准
btnState = MsgHhData.ADDHH_APPROVAL
elseif joinType == GameConst.GUILD_APPLY_AUTO then--自动
if nMyPlayerLv >= nNeedPlayerLv then
btnState = MsgHhData.ADDHH_IMMEDIATELY--自动满足条件
else
btnState = MsgHhData.ADDHH_LEVEL
end
end
end
--对自己的控件做点击处理
addBtn.btnState = btnState
applyBtn.btnState = btnState
local function callback(sender, eventType)
if eventType == ccui.TouchEventType.ended then
NetMsg_xxx.XXX(guildId, 1)--发包
end
end
addBtn:addTouchEventListener(callback)
local function callback(sender, eventType)
if eventType == ccui.TouchEventType.ended then
NetMsg_xxx.XXX(guildId, 1)--发包
end
end
applyBtn:addTouchEventListener(callback)
--根据状态刷新显示效果
if btnState == MsgHhData.ADDHH_REFUSE then -- 1
addBtn:show()
applyBtn:hide()
addBtn:setEnabled(false)
m_Label_JoinHh:setString("加入")
m_Label_NoOpen:show()
m_Label_LevelLimit:hide()
elseif btnState == MsgHhData.ADDHH_IMMEDIATELY then -- 2
addBtn:show()
applyBtn:hide()
addBtn:setEnabled(true)
m_Label_JoinHh:setString("加入")
m_Label_NoOpen:hide()
m_Label_LevelLimit:hide()
elseif btnState == MsgHhData.ADDHH_APPROVAL then -- 3
addBtn:hide()
applyBtn:show()
elseif btnState == MsgHhData.ADDHH_LEVEL then -- 4
addBtn:show()
applyBtn:hide()
addBtn:setEnabled(false)
m_Label_JoinHh:setString("加入")
m_Label_NoOpen:hide()
m_Label_LevelLimit:show()
m_Label_LevelLimit:setString("等级>=" .. nNeedPlayerLv)
elseif btnState == MsgHhData.ADDHH_MEMMAX then -- 5
addBtn:show()
applyBtn:hide()
addBtn:setEnabled(false)
m_Label_JoinHh:setString("已满")
m_Label_NoOpen:hide()
m_Label_LevelLimit:hide()
end
end
需求:
image.png
网友评论