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
网友评论