您的位置:首页 > 移动开发 > Cocos引擎

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

2013-11-21 10:58 393 查看
//触屏事件
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();
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Cocos2d-x 触摸时间
相关文章推荐