美文网首页cocos2d-Luacocos2d
cocos2d-lua 简单状态机 机制

cocos2d-lua 简单状态机 机制

作者: 人气小哥 | 来源:发表于2017-11-02 10:52 被阅读12次

    以前讲过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

    相关文章

      网友评论

        本文标题:cocos2d-lua 简单状态机 机制

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