原做者:有緣人 來源:新浪微博 地址:http://blog.sina.com.cn/s/blog_6ac2c7260102vvdu.htmlphp
1、touch事件響應分爲單點觸摸響應和多點觸摸響應。html
單點觸摸響應須要重載的方法:java
virtual bool ccTouchBegan(CCTouch *pTouch, CCEvent *pEvent);微信
virtual void ccTouchMoved(CCTouch *pTouch, CCEvent *pEvent);網站
virtual void ccTouchEnded(CCTouch *pTouch, CCEvent *pEvent);this
virtual void ccTouchCancelled(CCTouch *pTouch, CCEvent *pEvent);spa
多點觸摸須要重載的方法:.net
virtual void ccTouchesBegan(CCSet *pTouches, CCEvent *pEvent);設計
virtual void ccTouchesMoved(CCSet *pTouches, CCEvent *pEvent);代理
virtual void ccTouchesEnded(CCSet *pTouches, CCEvent *pEvent);
virtual void ccTouchesCancelled(CCSet *pTouches, CCEvent *pEvent);
2、單點觸摸本質上須要調用的方法,即設置touch的代理
CCDirector::sharedDirector()->getTouchDispatcher()->addTargetedDelegate(this,-129,true);
多點觸摸本質上須要調用的方法
CCDirector::sharedDirector()->getTouchDispatcher()->addStandardDelegate(this,-129);
因此,只要調用了以上方法,就能夠實現觸摸響應,就再也不須要調用setTouchEnabled(true);
3、setTouchEnabled的方法實現
void CCLayer::setTouchEnabled(bool enabled) { if (m_bTouchEnabled != enabled) { m_bTouchEnabled = enabled; if (m_bRunning) { if (enabled) { this->registerWithTouchDispatcher(); } else { // have problems? CCDirector::sharedDirector()->getTouchDispatcher()->removeDelegate(this); } } } }
這段代碼最主要的一句this->registerWithTouchDispatcher();
這個方法中就是調用第二點中提到的兩個delegate添加方法。
因此,我們實現touch響應的話,須要重載 registerWithTouchDispatcher()方法,並在這個方法中添加實現
void HelloWorld::registerWithTouchDispatcher() { CCDirector::sharedDirector()->getTouchDispatcher()->addStandardDelegate(this,-129); //CDirector::sharedDirector()->getTouchDispatcher()->addTargetedDelegate(this,-129,true); }
由此,實現touch事件響應須要作的操做:
1.重載registerWithTouchDispatcher()並實現
2.setTouchEnabled(true);
3.重載touch或者touches系列方法
4、在CCLayer的registerWithTouchDispatcher()中有關於m_eTouchMode的判斷,而且有setTouchMode()方法,參數有兩種:kCCTouchesOneByOne和 kCCTouchesAllAtOnce,分別表明單點觸摸和多點觸摸
當touchMode爲kCCTouchesOneByOne 時,調用的是addTargetedDelegate方法;當touchMode爲kCCTouchesAllAtOnce時,調用的是addStandardDelegate方法
因此,「重載registerWithTouchDispatcher()並實現」能夠由setTouchMode()方法來替換
歡迎關注關東昇新浪微博@tony_ 關東昇。
關注智捷課堂微信公共平臺,瞭解最新技術文章、圖書、教程信息
更多精品iOS、Cocos、移動設計課程請關注智捷課堂官方網站:http://www.zhijieketang.com
智捷課堂論壇網站:http://51work6.com/forum.php