cocos2dx-多点触控

cocos2dx-多点触控声明本教程仅用于初学cocos2dx同学使用,内容由本人(孤狼)学习过程中笔记编写,本教程使用cocos2dx版本为2.1.4。本教程内容可以自由转载,但必须同时附带本声明,或注明出处。gl.paea.cn版权所有。…

大家好,欢迎来到IT知识分享网。

声  明


       本教程仅用于初学cocos2dx同学使用,内容由本人(孤狼)学习过程中笔记编写,本教程使用cocos2dx版本为2.1.4。本教程内容可以自由转载,但必须同时附带本声明,或注明出处。

gl.paea.cn版权所有。

       hello,大家好,欢迎回到“和屌丝一起学cocos2dx”系列教程。上节我们说到了触控事件,不知道大家回去有没有测试呢?那个可爱的叮当猫是不是可以随着你的手指一起移动呢?哈哈,好了,这节我们说一下多点触控,估计大家早就迫不及待了吧。

cocos2dx-多点触控

【一】:这个和单点有啥区别

1.使用上的区别。

这个不用多说,有些情况下我们是需要多点触控来实现更好的效果,比如,切水果。

2.和单点的区别

[1].单点使用监听类是CCtargetedTouchDelegate,而多点使用CCtangardTouchDelegate.

[2].多点触控还需要多一个步骤就是注册多点触控。这里你可能会问,为啥单点触控都放在onEnter生命周期函数里,多点干嘛要单独写个。这里是因为,如果你放在onEnter里,可能会崩溃哦。

[3].另外多点触控要有开启才能用,就是开启多点触控函数setTouchEnabled.

[4].多点触控中的ccTouchesBegan不是布尔型哦。

【二】:函数

添加委托

addStandardDelegate();

开启多点触控(不写没有效果哦)

setTouchEnabled();

触屏事件:

1.注册多点触控

virtual void registerWithTouchDispatcher(void);

2.当用户第一次触碰手机屏幕时响应的回调函数

virtual void ccTouchesBegan(CCSet * touchs,CCEvent * event);

3.当用户手指在手机屏幕上滑动时响应的回调函数

virtual void ccTouchesMoved(CCSet * touchs,CCEvent * event);

4.当用户手指在离开手机屏幕上时响应的回调函数

virtual void ccTouchesEnded(CCSet * touchs,CCEvent * event);

这里不再使用参数CCTouch,而是他们的集合。

CCtouch

1.getID()//得到当前触点的下标(0开始)

【三】:示例

1.新建项目Touchsdemo

2.加载5张图片

cocos2dx-多点触控cocos2dx-多点触控cocos2dx-多点触控cocos2dx-多点触控cocos2dx-多点触控

Touchsdemo.h

//写上多点触控的回调函数

virtual void registerWithTouchDispatcher(void);

virtual void ccTouchesBegan(CCSet * set,CCEvent * e);

virtual void ccTouchesMoved(CCSet * set,CCEvent * e);

virtual void ccTouchesEnded(CCSet * set,CCEvent * e);

//写上生命周期函数

virtual void onEnter();

virtual void onExit();

cocos2dx-多点触控

Touchsdemo.cpp

1.初始化函数中

这里我们创建5个精灵,用于区分5点。

//-new-//

CCSize mysize=CCDirector::sharedDirector()->getWinSize();

//添加5个精灵

CCSprite* sp1 = CCSprite::create(“1.png”);

CCSprite* sp2 = CCSprite::create(“2.png”);

CCSprite* sp3 = CCSprite::create(“3.png”);

CCSprite* sp4 = CCSprite::create(“4.png”);

CCSprite* sp5 = CCSprite::create(“5.png”);

sp1->setPosition(ccp(30,30));

sp2->setPosition(ccp(30,30));

sp3->setPosition(ccp(30,30));

sp4->setPosition(ccp(30,30));

sp5->setPosition(ccp(30,30));

this->addChild(sp1,0,1);

this->addChild(sp2,0,2);

this->addChild(sp3,0,3);

this->addChild(sp4,0,4);

this->addChild(sp5,0,5);

//开启多点

this->setTouchEnabled(true);

//-new-//

cocos2dx-多点触控

2.注册监听

void Touchsdemo::registerWithTouchDispatcher(void){

   //注册监听

   CCDirector::sharedDirector()->getTouchDispatcher()->addStandardDelegate(this,0);

}


cocos2dx-多点触控

3.实现接触屏幕事件

void Touchsdemo::ccTouchesBegan(CCSet * set,CCEvent * e){

   CCSetIterator iter=set->begin();

   //这里的iter相当于系统分配的数字,

   //set->begin()获取第一个数字

   //set->end()就是最后一位

   for(;iter!=set->end();iter++){

       //这里呢,就是单点处理了,可以理解为把多点拆成单点来做

       CCTouch * mytouch=(CCTouch *)(* iter);

       CCPoint cp=mytouch->getLocation();

 //这里我们对5个触摸块进行处理

       if(mytouch->getID()==0){

           CCSprite * sp=(CCSprite * )this->getChildByTag(1);

           sp->setPosition(cp);

       }

       if(mytouch->getID()==1){

           CCSprite * sp=(CCSprite * )this->getChildByTag(2);

           sp->setPosition(cp);

       }

       if(mytouch->getID()==2){

           CCSprite * sp=(CCSprite * )this->getChildByTag(3);

           sp->setPosition(cp);

       }

       if(mytouch->getID()==3){

           CCSprite * sp=(CCSprite * )this->getChildByTag(4);

           sp->setPosition(cp);

       }

       if(mytouch->getID()==4){

           CCSprite * sp=(CCSprite * )this->getChildByTag(5);

           sp->setPosition(cp);

       }

   }

}

cocos2dx-多点触控

4.用户按住或拖动屏幕事件

void Touchsdemo::ccTouchesMoved(CCSet * set,CCEvent * e){

   CCSetIterator iter=set->begin();

   for(;iter!=set->end();iter++){

       CCTouch * mytouch=(CCTouch *)(* iter);

       CCPoint cp=mytouch->getLocation();

//这里我们对5个触摸块进行处理

       if(mytouch->getID()==0){

           CCSprite * sp=(CCSprite * )this->getChildByTag(1);

           sp->setPosition(cp);

       }

       if(mytouch->getID()==1){

           CCSprite * sp=(CCSprite * )this->getChildByTag(2);

           sp->setPosition(cp);

       }

       if(mytouch->getID()==2){

           CCSprite * sp=(CCSprite * )this->getChildByTag(3);

           sp->setPosition(cp);

       }

       if(mytouch->getID()==3){

           CCSprite * sp=(CCSprite * )this->getChildByTag(4);

           sp->setPosition(cp);

       }

       if(mytouch->getID()==4){

           CCSprite * sp=(CCSprite * )this->getChildByTag(5);

           sp->setPosition(cp);

       }

   }

}

cocos2dx-多点触控

5.用户离开屏幕事件

void Touchsdemo::ccTouchesEnded(CCSet * set,CCEvent * e){

   CCSetIterator iter=set->begin();

   int a[6]={0,0,0,0,0,0};//创建一个数组

   for(;iter!=set->end();iter++){

       CCTouch * mytouch=(CCTouch *)(* iter);

       CCPoint 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){

           CCSprite * sp=(CCSprite *)this->getChildByTag(i);

           sp->runAction(CCMoveTo::create(5,ccp(30,30)));

       }

   }

}

cocos2dx-多点触控

6.实现生命周期函数

void Touchsdemo::onEnter(){

   CCLayer::onEnter();

}

void Touchsdemo::onExit(){

   CCDirector::sharedDirector()->getTouchDispatcher()->removeDelegate(this);

   CCLayer::onExit();

}

cocos2dx-多点触控

   好了我们看下效果,fuck。。电脑上只有一个点,好吧。我已经打包好了apk在demo里面,想看效果,直接下载demo吧。

cocos2dx-多点触控

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/34061.html

(0)

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信