cocos2d-x溫故(四)!Touch!

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();
        
    }

}

其隊三個函數相似!

相關文章
相關標籤/搜索