天天看點

cocos2dx 精靈增加觸摸事件

  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;

}

繼續閱讀