【Cocos2d-x 3.0學習筆記】觸摸

//觸屏事件
virtual bool ccTouchBegan(Touch * touch,Event * event);
virtual void ccTouchMoved(Touch * touch,Event * event);
virtual void ccTouchEnded(Touch * touch,Event * event);

//生命週期
virtual void onEnter();
virtual void onExit();

void Touchdemo::onEnter()
{
//開啓觸屏監聽
Director::sharedDirector()->getTouchDispatcher()->addTargetedDelegate(this,0,false);
Layer::onEnter();//一定不要忘了
}

void Touchdemo::onExit()
{
//關閉觸屏監聽
Director::sharedDirector()->getTouchDispatcher()->removeDelegate(this);
Layer::onExit();//一定不要忘了
}
===========================================================================================
添加委託
addStandardDelegate();


開啓多點觸控(不寫沒有效果哦)
setTouchEnabled();

觸屏事件:
1.註冊多點觸控
virtual void registerWithTouchDispatcher(void);

2.當用戶第一次觸碰手機屏幕時響應的回調函數
virtual void ccTouchesBegan(Set * touchs,Event * event);

3.當用戶手指在手機屏幕上滑動時響應的回調函數
virtual void ccTouchesMoved(Set * touchs,Event * event);

4.當用戶手指在離開手機屏幕上時響應的回調函數
virtual void ccTouchesEnded(Set * touchs,Event * event);

//寫上多點觸控的回調函數
virtual void registerWithTouchDispatcher(void);
virtual void ccTouchesBegan(Set * set,Event * e);
virtual void ccTouchesMoved(Set * set,Event * e);
virtual void ccTouchesEnded(Set * set,Event * e);

//寫上生命週期函數
virtual void onEnter();
virtual void onExit();

註冊監聽
void Touchsdemo::registerWithTouchDispatcher(void)
{
   //註冊監聽
   Director::sharedDirector()->getTouchDispatcher()->addStandardDelegate(this,0);
}
void Touchsdemo::ccTouchesBegan(Set * set,Event * e)
{
   SetIterator iter=set->begin();
   //這裏的iter相當於系統分配的數字,
   //set->begin()獲取第一個數字
   //set->end()就是最後一位
   for(;iter!=set->end();iter++){
       //這裏呢,就是單點處理了,可以理解爲把多點拆成單點來做
       CTouch * mytouch=(Touch *)(* iter);
       Point cp=mytouch->getLocation();
 //這裏我們對5個觸摸塊進行處理
       if(mytouch->getID()==0){
           Sprite * sp=(Sprite * )this->getChildByTag(1);
           sp->setPosition(cp);
       }
       if(mytouch->getID()==1){
           Sprite * sp=(Sprite * )this->getChildByTag(2);
           sp->setPosition(cp);
       }
       if(mytouch->getID()==2){
           Sprite * sp=(Sprite * )this->getChildByTag(3);
           sp->setPosition(cp);
       }
       if(mytouch->getID()==3){
           Sprite * sp=(CCSprite * )this->getChildByTag(4);
           sp->setPosition(cp);
       }
       if(mytouch->getID()==4){
           Sprite * sp=(Sprite * )this->getChildByTag(5);
           sp->setPosition(cp);
       }
   }
}

void Touchsdemo::ccTouchesEnded(Set * set,CCEvent * e)
{
   CCSetIterator iter=set->begin();
   int a[6]={0,0,0,0,0,0};//創建一個數組
   for(;iter!=set->end();iter++){
       Touch * mytouch=(Touch *)(* iter);
       Point cp=mytouch->getLocation();
 //這裏我們對5個觸摸塊進行處理
       if(mytouch->getID()==0){
           a[1]=1;
       }
       if(mytouch->getID()==1){
           a[2]=1;
       }
       if(mytouch->getID()==2){
           a[3]=1;
       }
       if(mytouch->getID()==3){
           a[4]=1;
       }
       if(mytouch->getID()==4){
           a[5]=1;
       }
   }
   for(int i=1;i<=5;i++){<>
      if(a[i]==1){
           Sprite * sp=(Sprite *)this->getChildByTag(i);
           sp->runAction(MoveTo::create(5,ccp(30,30)));
       }
   }
}

//實現生命週期函數
void Touchsdemo::onEnter()
{
   Layer::onEnter();
}

void Touchsdemo::onExit()
{
   Director::sharedDirector()->getTouchDispatcher()->removeDelegate(this);
   Layer::onExit();
}



發佈了58 篇原創文章 · 獲贊 78 · 訪問量 74萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章