virtual void registerWithTouchDispatcher(void); virtual bool ccTouchBegan(CCTouch *pTouch,CCEvent *pEvent); virtual void ccTouchMoved(CCTouch *pTouch,CCEvent *pEvent); virtual void ccTouchEnded(CCTouch *pTouch,CCEvent *pEvent); virtual void tableCellHighlight(CCTableView* table, CCTableViewCell* cell);
//设置成-1让它的层级降低这样就可以优先被触发 //这样就会先执行touchbegain再执行tableCellHighlight void CCardlayer::registerWithTouchDispatcher(void) { CCDirector::sharedDirector()->getTouchDispatcher()->addTargetedDelegate(this, -1, false); }
bool CCardlayer::ccTouchBegan(CCTouch *pTouch,CCEvent *pEvent) { switch (m_eClickTable) { case CCardlayer::CARD_TABLE_EQUIP_TAG: { if (m_nClickIndex != 0) return false; } break; case CCardlayer::CARD_TABLE_GENERAL_TAG: { if (m_nClickIndex != 1) return false; } break; case CCardlayer::CARD_TABLE_TRAP_TAG: { if (m_nClickIndex != 2) return false; } break; default: break; } m_pTouchLocation = pTouch; //设置该函数优先触发主要是为了获取到这个变量 return true; }
void CCardlayer::tableCellHighlight(CCTableView* table, CCTableViewCell* cell) { m_tPos = cell->convertTouchToNodeSpace(m_pTouchLocation); for (int i = 0; i < 2; ++i) { CCSprite* pFrame = (CCSprite*)cell->getChildByTag(CARD_CELL_BTN_LEFT_TAG + i); CC_ERROR(pFrame, "【CCardlayer::tableCellHighlight】 pFrame 为空"); if(pFrame->boundingBox().containsPoint(m_tPos)) { UINT unIndex = cell->getIdx(); m_nMoveIdx = unIndex * RIGHT_CELL_BTN_AMOUNT + i; this->LoadMove(); return; } } }
void CCardlayer::LoadMove() { std::string g_ImgPath(CGlobalMgr::GetInstance()->GetResourcesEx()); std::string strPath; const Item_Info* pInfo = NULL; const CEudemon* pEudemon = NULL; CCSprite* pImgMove = NULL; switch (m_eClickTable) { case CCardlayer::CARD_TABLE_EQUIP_TAG: { pInfo = m_pPackageMgr->QueryEquipById(m_nMoveIdx); CC_ERROR(pInfo, "【CCardlayer::LoadMove】pInfo 为空") CCString* pStrImgMove = CCString::createWithFormat("%d", pInfo->nImageIdx); CC_ERROR(pStrImgMove, "【CCardlayer::LoadMove】pStrImgMove 为空") strPath = g_ImgPath + pStrImgMove->getCString() + ".png"; pImgMove = CCSprite::create(strPath.c_str()); } break; case CCardlayer::CARD_TABLE_GENERAL_TAG: { pEudemon = m_pCardMgr->QueryEudemonByIndex(m_nMoveIdx); CC_ERROR(pEudemon, "【CCardlayer::LoadMove】pEudemon 为空") CCString* pStrImgMove = CCString::createWithFormat("%d", pEudemon->GetLookFace()); CC_ERROR(pStrImgMove, "【CCardlayer::LoadMove】pStrImgMove 为空") strPath = g_ImgPath + pStrImgMove->getCString() + ".png"; pImgMove = CCSprite::create(strPath.c_str()); } break; case CCardlayer::CARD_TABLE_TRAP_TAG: { pInfo = m_pPackageMgr->QueryEquipById(m_nMoveIdx); CCString* pStrImgMove = CCString::createWithFormat("%d", pInfo->nImageIdx); CC_ERROR(pStrImgMove, "【CCardlayer::LoadMove】pStrImgMove 为空") strPath = g_ImgPath + pStrImgMove->getCString() + ".png"; pImgMove = CCSprite::create(strPath.c_str()); } break; default: break; } CC_ERROR(pImgMove, "【CCardlayer::LoadMove】pImgMove 为空") pImgMove->setPosition(m_tPos); pImgMove->setAnchorPoint(ccp(0.5, 0.5)); pImgMove->setVisible(false); pImgMove->setTag(CARD_IMG_MOVE_TAG); this->addChild(pImgMove); }
void CCardlayer::ccTouchMoved(CCTouch *pTouch,CCEvent *pEvent) { CCSprite* pImgMove = (CCSprite*)this->getChildByTag(CARD_IMG_MOVE_TAG); CC_ERROR(pImgMove, "【CCardlayer::ccTouchMoved】pImgMove为空") pImgMove->setVisible(true); pImgMove->setPosition(pTouch->getLocation()); } void CCardlayer::ccTouchEnded(CCTouch *pTouch,CCEvent *pEvent) { CCPoint tPos = pTouch->getLocation(); if ((tPos.x >= RIGHT_RECT_START_X && tPos.x <= RIGHT_RECT_START_X + RIGHT_RECT_WIDTH) && (tPos.y >= RIGHT_RECT_START_Y && tPos.y <= RIGHT_RECT_START_Y + RIGHT_RECT_HEIGH)) { } this->removeChildByTag(CARD_IMG_MOVE_TAG); }