You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

180 line
4.6 KiB

  1. local CardNode = class("CardNode", function()
  2. return cc.ImageView:create()
  3. end)
  4. local NORMAL_COLOR = cc.c3b(0xff, 0xff, 0xff)
  5. local NORMAL_STATE = false
  6. local DOWN_COLOR = cc.c3b(0xb3, 0xaa, 0xaa)
  7. local BOMB_COLOR = cc.c3b(0xff, 0xfb, 0xe6)
  8. local DOWN_STATE = true
  9. local DOWN_DLT = 60
  10. function CardNode:ctor(o,uniqueFlag,cardType)--cardType牌资源类型
  11. local ui = loadUI("pk_zgwrddz/res/ui/ui_room/ui_wrddz_cardnode.ui")
  12. if cardType and cardType == 2 then
  13. ui = loadUI("pk_zgwrddz/res/ui/ui_room/ui_wrddz_lcardnode.ui")
  14. self.cardType = 2
  15. end
  16. self.ui = ui
  17. self:addChild(ui)
  18. self.imgBg = self.ui.Items.cardBg
  19. self._val = -1
  20. self._isLast = false
  21. self._touchWidth = 60
  22. self._selectedHeight = 0
  23. self._normalHeight = 0
  24. self._press = NORMAL_STATE
  25. self._noTouch = false--当前牌不可选择
  26. --唯一标识,创建时传入,5人斗地主有3副牌,有三张相同的牌,通过这个判断选中的是哪张,传入序号就好(第几个创建)
  27. self._uniqueFlag = uniqueFlag
  28. self._isBombCard = false--是否是炸弹牌
  29. self:setLordFlagVisible(false)
  30. end
  31. function CardNode:setCard( val )
  32. self._val = val
  33. if val <= 0 then
  34. if self.cardType and self.cardType == 2 then
  35. self.imgBg:loadTexture("wrddz_lcards_back.png", 1)
  36. else
  37. self.imgBg:loadTexture("wrddz_cards_back.png", 1)
  38. end
  39. else
  40. local cardPng = pokerWRDDZPng(val)
  41. if self.cardType and self.cardType == 2 then
  42. cardPng = pokerLPng(val)
  43. end
  44. self.imgBg:loadTexture(cardPng, 1)
  45. end
  46. end
  47. function CardNode:getVal()
  48. return self._val
  49. end
  50. --获取唯一标识
  51. function CardNode:getUniqueFlag()
  52. return self._uniqueFlag
  53. end
  54. -- 设置牌是否可以选中
  55. function CardNode:setNoTouch( is )
  56. self._noTouch = is
  57. if is == true then
  58. self.imgBg:setColor(DOWN_COLOR)
  59. else
  60. self.imgBg:setColor(NORMAL_COLOR)
  61. end
  62. end
  63. function CardNode:setNoTouchNormal( is )
  64. self._noTouch = is
  65. self.imgBg:setColor(NORMAL_COLOR)
  66. end
  67. -- 获取牌是否可以选中
  68. function CardNode:getNoTouch()
  69. return self._noTouch
  70. end
  71. -- 是否是排列中最后一张牌
  72. function CardNode:setLast( is )
  73. self._isLast = is
  74. end
  75. -- 设置按下状态
  76. function CardNode:setDown()
  77. if not self.imgBg or tolua.isnull(self.imgBg) then return end
  78. if self._press ~= DOWN_STATE then
  79. if self._isBombCard then
  80. self.imgBg:setColor(BOMB_COLOR)
  81. else
  82. self.imgBg:setColor(NORMAL_COLOR)--DOWN_COLOR
  83. end
  84. self._press = DOWN_STATE
  85. local pt = self:getPosition()
  86. self:setPosition(cc.p(pt.x, self._selectedHeight))
  87. end
  88. end
  89. -- 设置透明度
  90. function CardNode:setTouMingDu( flag )
  91. if flag then
  92. self._isBombCard = true
  93. self.imgBg:setColor(BOMB_COLOR)
  94. else
  95. self._isBombCard = false
  96. self.imgBg:setColor(NORMAL_COLOR)
  97. end
  98. end
  99. -- 设置选择状态高度
  100. function CardNode:setSelectedHeight( height )
  101. self._selectedHeight = height
  102. end
  103. -- 设置normal状态高度
  104. function CardNode:setNormalHeight( height )
  105. self._normalHeight = height
  106. end
  107. -- 设置选择状态牌颜色
  108. function CardNode:setDownColor()
  109. self.imgBg:setColor(DOWN_COLOR)
  110. end
  111. -- 是否选择状态
  112. function CardNode:isDown()
  113. return self._press == DOWN_STATE
  114. end
  115. -- 将牌设置为正常状态
  116. function CardNode:setNormal()
  117. if not self.imgBg or tolua.isnull(self.imgBg) then return end
  118. if self._press ~= NORMAL_STATE then
  119. if self._isBombCard then
  120. self.imgBg:setColor(BOMB_COLOR)
  121. else
  122. self.imgBg:setColor(NORMAL_COLOR)--DOWN_COLOR
  123. end
  124. self._press = NORMAL_STATE
  125. local pt = self:getPosition()
  126. self:setPosition(cc.p(pt.x, self._normalHeight))
  127. end
  128. end
  129. -- 将牌设置为正常状态颜色
  130. function CardNode:setNormalColor()
  131. self.imgBg:setColor(NORMAL_COLOR)
  132. end
  133. -- 是否正常状态
  134. function CardNode:isNormal()
  135. return self._press == NORMAL_STATE
  136. end
  137. function CardNode:getRect()
  138. if self._noTouch then
  139. return cc.rect(0, 0, 0, 0)
  140. end
  141. local spt = self:getParent():convertToWorldSpace(cc.p(self:getPosition()))
  142. local s = self.imgBg:getContentSize()
  143. s.width = s.width * self:getScaleX()
  144. s.height = s.height * self:getScaleY()
  145. if not self._isLast then
  146. return cc.rect(spt.x-s.width/2, spt.y-s.height/2, self._touchWidth*self:getScaleX(), s.height)
  147. else
  148. return cc.rect(spt.x-s.width/2, spt.y-s.height/2, s.width, s.height)
  149. end
  150. end
  151. -- 设置地主标签显示
  152. function CardNode:setLordFlagVisible(vis)
  153. self.ui.Items.img_dzFlag:setVisible(vis)
  154. end
  155. --暗地主牌显示光圈
  156. function CardNode:setGuangQuan()
  157. if not self.imgBg or tolua.isnull(self.imgBg) then return end
  158. local sprGQ = cc.ImageView:createNode()
  159. sprGQ:setAnchorPoint(cc.p(0.5,0.5))
  160. sprGQ:loadTexture("pk_zgwrddz/res/ui/zy_room/wrddz_img_cardGQ.png")
  161. local s = self.imgBg:getContentSize()
  162. sprGQ:setPosition(s.width/2,s.height/2);
  163. self.imgBg:addChild(sprGQ)
  164. end
  165. return CardNode