cocos2dx 点击事件分析(4)
2015-03-30 15:52
417 查看
1、 添加单点触摸事件,单点触摸事件有优先级,bSwallowsTouches是否吞噬,高优先级的 会优先响应,而且可以吞噬事件,不让触摸事件往低优先级传递。 void CCTouchDispatcher::addTargetedDelegate(CCTouchDelegate *pDelegate, int nPriority, bool bSwallowsTouches) { CCTouchHandler *pHandler = CCTargetedTouchHandler::handlerWithDelegate(pDelegate, nPriority, bSwallowsTouches); if (! m_bLocked) { forceAddHandler(pHandler, m_pTargetedHandlers); } else { /* If pHandler is contained in m_pHandlersToRemove, if so remove it from m_pHandlersToRemove and return. * Refer issue #752(cocos2d-x) */ if (ccCArrayContainsValue(m_pHandlersToRemove, pDelegate)) { ccCArrayRemoveValue(m_pHandlersToRemove, pDelegate); return; } //CCArray* m_pHandlersToAdd这个可以理解为一个临时保存CCTouchHandler的地方, //m_bLocked 如果这个值为true,这把CCTouchHandler先加入到m_pHandlersToAdd, //然后在合适的时间,即CCTouchDispatcher::touches函数中,再把m_pHandlersToAdd数组里面 //CCTouchHandler加入到m_pTargetedHandlers或者m_pStandardHandlers中。 m_pHandlersToAdd->addObject(pHandler); m_bToAdd = true; } } -->> // // handlers management根据优先级进行排序,然后添加到单点触摸事件列表中,由此可知, //值越小,优先级越高 // 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); } 2、移除:和加入类似 void CCTouchDispatcher::removeDelegate(CCTouchDelegate *pDelegate) { if (pDelegate == NULL) { return; } if (! m_bLocked) { forceRemoveDelegate(pDelegate); } else { /* If pHandler is contained in m_pHandlersToAdd, if so remove it from m_pHandlersToAdd and return. * Refer issue #752(cocos2d-x) */ CCTouchHandler *pHandler = findHandler(m_pHandlersToAdd, pDelegate); if (pHandler) { m_pHandlersToAdd->removeObject(pHandler); return; } ccCArrayAppendValue(m_pHandlersToRemove, pDelegate); m_bToRemove = true; } } -->> void CCTouchDispatcher::removeDelegate(CCTouchDelegate *pDelegate) { if (pDelegate == NULL) { return; } if (! m_bLocked) { forceRemoveDelegate(pDelegate); } else { /* If pHandler is contained in m_pHandlersToAdd, if so remove it from m_pHandlersToAdd and return. * Refer issue #752(cocos2d-x) */ CCTouchHandler *pHandler = findHandler(m_pHandlersToAdd, pDelegate); if (pHandler) { m_pHandlersToAdd->removeObject(pHandler); return; } ccCArrayAppendValue(m_pHandlersToRemove, pDelegate); m_bToRemove = true; } }
相关文章推荐
- cocos2dx 点击事件分析(2)
- cocos2dx 点击事件分析(1)
- cocos2dx 点击事件分析(3)
- cocos2dx 点击事件分析(5)
- Launcher桌面点击&长按&拖动事件处理流程分析 .
- cocos2dx 新建的CCLayer触屏点击事件不好使的解决办法
- cocos2dx点击事件的分发问题
- Android onTouch 点击事件执行两次分析
- 【Cocos2dx】使用CCControlButton创建按钮、按钮点击事件,点击事件中的组件获取,setPosition的坐标问题
- 在cocos2dx中的点击事件
- cocos2dx-3.2 笔记 - 点击事件
- Android源码分析-点击事件派发机制
- cocos2dx 精灵点击事件
- 分析BUTTON按钮点击触发COMMAND事件
- View事件的传递之二----在屏幕上点击时事件在整个系统中的传递流程初分析
- quick_cocos2dx 点击事件
- Listview中布局控件导致点击事件失效的原因分析
- Android源码分析-点击事件派发机制
- Android源码分析-点击事件派发机制
- Android源码分析-对点击事件派发机制