cocos2d-x中要想實現觸摸就要實現CCTargetedTouchDelegate或CCStandardTouchDelegate協議中的一個。 函數
繼承CCTargetedTouchDelegate,你不用關心觸摸點,協議會自動分配。 this
而後你須要註冊一下,即 spa
CCDirector::sharedDirector()->getTouchDispatcher()->addTargetedDelegate(this, 0, true);第一個參數爲代理目標,第二個爲優先級,數值越小,觸摸點就會先傳遞。 代理
第三個爲是否要吞掉觸摸點,ture的話就是在ccTouchBegan返回true後觸摸點就再也不傳遞。 繼承
而後在節點釋放或再也不須要的時候取消註冊,CCDirector::sharedDirector()->getTouchDispatcher()->removeDelegate(this); rem
最後就是要實現須要的四個方法中的一個或多個: get
bool ccTouchBegan(CCTouch *pTouch, CCEvent *pEvent);注意返回值是bool型,返回true則觸摸點再也不傳遞,false的話繼。 it
void ccTouchMoved(CCTouch *pTouch, CCEvent *pEvent); io
void ccTouchEnded(CCTouch *pTouch, CCEvent *pEvent); cocos2d-x
void ccTouchCancelled(CCTouch *pTouch, CCEvent *pEvent);
這種主要用在一些單個節點中,如觸摸一個精靈,而後讓他放大。 當有許多子節點,如layer或都須要用到多點就要用到如下方法了。
繼承CCStandardTouchDelegate協議。layer默認。只須要如下操做
在初始化或進入的時候加上 setTouchEnabled(true);
實現四個方法中的一個或多個。如:
void MutiTouchTestLayer::ccTouchesBegan(CCSet *pTouches, CCEvent *pEvent) //返回值是void
{
CCSetIterator iter = pTouches->begin();
for (; iter != pTouches->end(); iter++)
{//這裏你要手動處理每個點!
CCTouch* pTouch = (CCTouch*)(*iter);
CCPoint location = pTouch->locationInView();
}
}
其隊三個函數相似!