大佬教程收集整理的这篇文章主要介绍了cocos2d中 各种setTouchPriority无效的问题,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
转载请注明地址:http://www.voidcn.com/article/p-nsewocfp-mg.html
CCTouchDispatcher中是这样分发触摸事件的:
CCARRAY_FOREACH(m_pTargetedHandlers,pObj)//这里是遍历了一个注册过触摸事件的数组,按优先级排序 { pHandler = (CCTargetedTouchHandler *)(pObj); if (! pHandler) { break; } bool bClaimed = false; if (uIndex == CCTOUCHBEGAN) { bClaimed = pHandler->getDelegate()->ccTouchBegan(pTouch,pEvent); if (bClaimed) { pHandler->getClaimedTouches()->addObject(pTouch); } } else if (pHandler->getClaimedTouches()->containsObject(pTouch)) { // moved ended canceled bClaimed = true; switch (sHelper.m_typE) { case CCTOUCHMOVED: pHandler->getDelegate()->ccTouchMoved(pTouch,pEvent); break; case CCTOUCHENDED: pHandler->getDelegate()->ccTouchEnded(pTouch,pEvent); pHandler->getClaimedTouches()->removeObject(pTouch); break; case CCTOUCHCANCELLED: pHandler->getDelegate()->ccTouchCancelled(pTouch,pEvent); pHandler->getClaimedTouches()->removeObject(pTouch); break; } } if (bClaimed && pHandler->isSwallowsTouches()) { if (bNeedsMutableSet) { pMutableTouches->removeObject(pTouch); } break; } }然后如果调用这里的 setPriority,就会重新排序数组: rearrangeHandlers
void CCTouchDispatcher::setPriority(int nPriority,CCTouchDelegate *pDelegatE) { CCassert(pDelegate != NULL,""); CCTouchHandler *handler = NULL; handler = this->findHandler(pDelegatE); CCassert(handler != NULL,""); if (handler->getPriority() != nPriority) { handler->setPriority(nPriority); this->rearrangeHandlers(m_pTargetedHandlers); this->rearrangeHandlers(m_pStandardHandlers); } }
void CCTouchHandler::setPriority(int nPriority) { m_nPriority = nPriority; }
void CCTouchDispatcher::forceAddHandler(CCTouchHandler *pHandler,CCArray *pArray) { unsigned int u = 0; CCObject* pObj = NULL; CCARRAY_FOREACH(pArray,pObj) { CCTouchHandler *h = (CCTouchHandler *)pObj; if (h) { if (h->getPriority() < pHandler->getPriority()) { ++u; } if (h->getDelegate() == pHandler->getDelegate()) { CCassert(0,""); return; } } } pArray->insertObject(pHandler,u); }
以上是大佬教程为你收集整理的cocos2d中 各种setTouchPriority无效的问题全部内容,希望文章能够帮你解决cocos2d中 各种setTouchPriority无效的问题所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。