【Cocos2d-x 3.0学习笔记】触摸

本文详细介绍了Cocos2d-x中触屏事件的处理方式,包括单点和多点触控的实现方法。通过具体示例展示了如何在游戏开发中使用这些事件来控制游戏元素。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

//触屏事件
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();
}



评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值