cocos2dx 給精靈實作一個觸摸事件方法:
讓精靈類繼承CCsprite和CCTargetedTouchDelegate兩個類,然後實作CCTargetedTouchDelegate的幾個虛函數如下:
virtual bool ccTouchBegan(CCTouch *pTouch, CCEvent *pEvent);
// optional
virtual void ccTouchMoved(CCTouch *pTouch, CCEvent *pEvent);
virtual void ccTouchEnded(CCTouch *pTouch, CCEvent *pEvent);
給精靈增加觸摸事件的方式:
1.在精靈類初始化的時候調用
2.在進入場景的時候調用,如果在進入場景的時候調用,則需要精靈類需要實作兩外的兩個方法
virtual void onEnter();//進入時注冊
virtual void onExit();//出場景時删除
注冊方法:
void SelfCard::onEnter()
{
CCLog("sprite enter scene");
CCSprite::onEnter();
CCDirector::sharedDirector()->getTouchDispatcher()->addTargetedDelegate(this,-127,true);
//這一步是關鍵
}
現在問題來了 通過以上方法加入到觸摸事件的時候,不知道是不是全局的觸摸事件,隻要觸摸然後精靈類就有會有反應,按我的了解就是我在精靈類上注冊了觸摸事件,那我觸摸這個精靈的時候,才會有觸摸相應的,但是實際中不是,是以我的了解就是 CCDirector::sharedDirector()->getTouchDispatcher()->addTargetedDelegate(this,-127,true);
這個方法是所有的觸摸事件的集合,隻要有觸摸的事件,就會相應所有被注冊的事件,是以在每個觸摸的事件裡面自己要單獨處理有沒有被觸摸到:
bool SelfCard::ccTouchBegan(CCTouch *pTouch, CCEvent *pEvent){
CCPoint point=pTouch->getLocation();
if(!isTouch(point))
return false;
CCSprite *prite = CCSprite::create("dong.png");
prite->setPosition(ccp(this->getPositionX(),this->getPositionY()+50));
this->getParent()->addChild(prite,0,1001);
this->setVisible(false);
return true;
}
bool SelfCard::isTouch(CCPoint point)
{
CCPoint nodePoint=this->convertToNodeSpace(point);
CCSize size=this->getContentSize();
if(nodePoint.x>size.width ||nodePoint.x<0 ||nodePoint.y>size.height ||nodePoint.y<0 )
return false;
return true;
}