#pragma once #include "cocos2d.h" #include "ui/CocosGUI.h" #include "Define.h" #include "SparrowCardBase.h" #include "Types.h" USING_NS_CC; using namespace ui; using namespace std; //逻辑掩码 #define SP_MASK_COLOR 0xF0 //花色掩码 #define SP_MASK_VALUE 0x0F //数值掩码 #define SENDCARD_HEIGHT 130 //拖动出牌高度 #define TOP_CARD_HEIGHT 20 //弹起牌高度 ////////////////////////////////////////////////////////////////////////// // 麻将控件 class SparrowCard : public Sprite { public: SparrowCard(); virtual bool init(BYTE _value, EN_SPARROW_TYPE _cardType); // 场景退出回调 virtual void onExit(); void addClickEventListener(const std::function); // 子类实现 public: virtual bool IsValidCard(BYTE _value) = 0; // 是否是有效牌 // 麻将属性修改 public: static std::string GetCardValuePng(BYTE _value); // 获取值图片 void SetCardValuePng(BYTE _value, EN_SPARROW_TYPE _cardType); // 设置麻将值 bool ShowCardValue(BYTE _value); // 亮牌 void SetTingCardStatus(bool isTing); // 听牌状态 void SetKingStatus(bool isKing, std::string strKing); // 设置精牌 void SetTop(bool istop); // 设置弹起 void SetCurrentOutCard(bool isCurrent); // 设置当前牌标识 //触摸事件 public: void BindingTouchEvent(); bool TouchBegan(Touch* touch, Event* event); void TouchMove(Touch* touch, Event* event); void TouchEnd(Touch* touch, Event* event); void setTouchState(bool _btouch){ m_bTouch = _btouch; } bool getTouchState(){ return m_bTouch; } // 获取数值 public: BYTE GetCardData() { return m_ValueData; } EN_SPARROW_TYPE GetCardType(){ return m_CardType; } static BYTE GetCardValue(BYTE cbCardData) { return (cbCardData&SP_MASK_VALUE); } //获取数值 static BYTE GetCardColor(BYTE cbCardData) { return ((cbCardData&SP_MASK_COLOR) >> 4); } //获取花色 bool GetTop(){ return m_IsTop; } public: ImageView* m_pRootImage; // 根节点 BYTE m_ValueData; // 麻将数值 EN_SPARROW_TYPE m_CardType; // 麻将类型 bool m_IsTop; // 弹起标识 ImageView* m_cloneCardImg; //copy根節點 private: Vec2 m_originalPos; //触摸前的位置 Vec2 m_MovePos; //移动位置 int m_startZorder; //起始zorder值 bool m_bTouch; //是否触摸 std::function _SendCardCallBack; //回掉出牌 };