美文网首页cocos2d-lua
cocos2d-x lua多个暗杠同时存在的选择界面及在触摸事件

cocos2d-x lua多个暗杠同时存在的选择界面及在触摸事件

作者: 亮亮同学 | 来源:发表于2017-11-21 15:09 被阅读13次

cocos2d-x技术群新群:117871561
c++技术交流群:593010226

--显示多个杠的选择界面HonLin
function CardLayer:showMuiltGangCard(cbGangCards)
    local this = self
    --将手牌变灰禁止出牌
    for i = cmd.MAX_COUNT, 1, -1 do
        local card = self.nodeHandCard[cmd.MY_VIEWID]:getChildByTag(i)
        card:setColor(cc.c3b(100, 100, 100))
        self.bCardGray[i] = true
        card:getChildByTag(CardLayer.TAG_LISTEN_FLAG):setVisible(false)
    end
    
        self._Gang_bg = display.newLayer(cc.c4b(0, 0, 0, 125))
        self._Gang_bg:addTo(self)
        
        --触摸回调
        function self._Gang_bg:onTouched(event)
            local x,y = event.x,event.y
            -- dump(event)
            local p = cc.p(x,y)
            if event.name == "began" then
                for i=1,#self._group do
                    local node = self._group[i]
                    if cc.rectContainsPoint(node._rect,p) then
                        self._touchedNode = node
                        return true
                    end
                end
            elseif event.name == "ended" then
                if self._touchedNode then
                    self:onSelected(self._touchedNode)
                end
                self._touchedNode = nil
            end
        end
        
        function self._Gang_bg:onSelected(node)
            local card = node.data
            this._scene._scene:sendOperateCard(GameLogic.WIK_GANG,{card,card,card})
            this._Gang_bg:setVisible(false)
            this._Gang_bg:removeFromParent()
            for i = cmd.MAX_COUNT, 1, -1 do
                local card = this.nodeHandCard[cmd.MY_VIEWID]:getChildByTag(i)
                card:setColor(cc.c3b(255, 255, 255))
                this.bCardGray[i] = false
            end
        end
        --注册触摸监听
        self._Gang_bg:onTouch(handler(self._Gang_bg,self._Gang_bg.onTouched))
        
    self._Gang_bg:setVisible(true)
  
    --存放多个暗杠组
    local gangNodeGroup = {}
    --位置
    
    local w = 80
    local h = 116
    local lx = - w - 1
    local rx = w + 1
    local spy = (116 - 16) / 2 + 16
    
    --创建暗杠牌gangNode并加入到暗杠组gangNodeGroup
    
    for i = 1,#cbGangCards do
        local gangNode = cc.Node:create()
        gangNode:addTo(self._Gang_bg)
        gangNode.data = cbGangCards[i]
        for j = 1,4 do
            local gangbg = display.newSprite("game/font_middle/card_down.png")
            gangbg:addTo(gangNode)
            gangbg:move(lx+j*rx,0)
            local color = math.floor(cbGangCards[i] / 16)
            local value = math.floor(cbGangCards[i] % 16)
            local file = string.format("game/font_middle/font_%d_%d.png",color,value)
            local card = display.newSprite(file)
            card:addTo(gangbg)
            card:move(w/2,spy)
        end
        gangNodeGroup[i] = gangNode
    end
    
    --设置gangNode位置参数
    local scale = 0.75
    local w = (w + 1) * scale
    local dx = (w * 4 + w)
    local length = #gangNodeGroup * dx
    local startPos = display.cx - length/2 + dx / 2 -50

    local y = 200

    for i=1,#gangNodeGroup do
        local node = gangNodeGroup[i]
        node:move(startPos + (i-1) * dx, y)
        node:setScale(scale)
        node._rect = cc.rect(startPos + (i-1) * dx - w * 1.5, y - h/2 * scale, w * 4 , h * scale)
    end
    self._Gang_bg._group = gangNodeGroup
end

function CardLayer:onTouchBeganGangCards(tag)
    for i=1,#self._cbGangCards do
        local index = self._cbGangCards[i].index
        local v = #self.cbCardData - tag + 1
        if v >= index and v <= index + 3 then
            print("onTouch gang card:",v,self.cbCardData[v])
            self._onTouchGanCardsIndex = i
            break
        end
    end

    local index = self._cbGangCards[self._onTouchGanCardsIndex].index
    for j=index,index+3 do
        local tag = #self.cbCardData - j + 1
        local card = self.nodeHandCard[cmd.MY_VIEWID]:getChildByTag(tag)
        local x,y = card:getPosition()
        card:move(x,y+20)
    end

    return true
end
function CardLayer:onTouchMovedGangCards(pos)
    
    if self._onTouchGanCardsIndex then
        local index = self._cbGangCards[self._onTouchGanCardsIndex].index
        local flg = false
        for i=1,index+3 do
            local tag = #self.cbCardData - i + 1

            local card = self.nodeHandCard[cmd.MY_VIEWID]:getChildByTag(tag)
            local cardRect = card:getBoundingBox()
            if cc.rectContainsPoint(cardRect, pos) then
                flg = true
                break
            end
        end

        if not flg then
            for i=index,index+3 do
                local tag = #self.cbCardData - i + 1
                local card = self.nodeHandCard[cmd.MY_VIEWID]:getChildByTag(tag)
                local x,y = card:getPosition()
                card:move(x,y-20)
            end
            self._onTouchGanCardsIndex = nil
        end
    end
end

function CardLayer:onTouchEndedGangCards()
    if self._onTouchGanCardsIndex then
        local info = self._cbGangCards[self._onTouchGanCardsIndex]

        -- 将抬起的杠牌收回去
        local index = info.index
        for i=index,index+3 do
            local tag = #self.cbCardData - i + 1
            local card = self.nodeHandCard[cmd.MY_VIEWID]:getChildByTag(tag)
            local x,y = card:getPosition()
            card:move(x,y-20)
        end

        -- 清除蒙黑跟指示箭头
        for i = cmd.MAX_COUNT, 1, -1 do
            local card = self.nodeHandCard[cmd.MY_VIEWID]:getChildByTag(i)
            card:setColor(cc.c3b(255, 255, 255))
            self.bCardGray[i] = false
            card:getChildByTag(CardLayer.TAG_LISTEN_FLAG):setVisible(false)
        end

        local card = info.card
        self._scene._scene:sendOperateCard(GameLogic.WIK_GANG, card)

        self._onTouchGanCardsIndex = nil
        self._cbGangCards = nil
        self._bSelecteGangState = nil
    end
end

相关文章

网友评论

    本文标题:cocos2d-x lua多个暗杠同时存在的选择界面及在触摸事件

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