【一】:这个和单点有啥区别
1.使用上的区别。
这个不用多说,有些情况下我们是需要多点触控来实现更好的效果,比如,切水果。
2.和单点的区别
[1].单点使用监听类是CCtargetedTouchDelegate,而多点使用CCtangardTouchDelegate.
[2].多点触控还需要多一个步骤就是注册多点触控。这里你可能会问,为啥单点触控都放在onEnter生命周期函数里,多点干嘛要单独写个。这里是因为,如果你放在onEnter里,可能会崩溃哦。
[3].另外多点触控要有开启才能用,就是开启多点触控函数setTouchEnabled.
[4].多点触控中的ccTouchesBegan不是布尔型哦。
【二】:函数
触屏事件:
1.注册多点触控
virtual void registerWithTouchDispatcher(void);
2.当用户第一次触碰手机屏幕时响应的回调函数
virtual void ccTouchesBegan(CCSet *pTouches, CCEvent *pEvent);
3.当用户手指在手机屏幕上滑动时响应的回调函数
virtual void ccTouchesMoved(CCSet *pTouches, CCEvent *pEvent);
4.当用户手指在离开手机屏幕上时响应的回调函数
virtual void ccTouchesEnded(CCSet *pTouches, CCEvent *pEvent);
这里不再使用参数CCTouch,而是他们的集合。
CCtouch
1.getID()//得到当前触点的下标(0开始)
【三】:示例
如果是ios平台,要在 AppController.mm 中加入
//开启多点触控.. 默认是关闭的。
[__glView setMultipleTouchEnabled:YES];
如果是android就不用,因为默认是开启的...
因为这个问题曾经浪费了我大把时间。 mark!
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);
Touchsdemo.cpp
//开启多点
this->setTouchEnabled(true);
2.注册监听
void Touchsdemo::registerWithTouchDispatcher(void){
//注册监听
CCDirector::sharedDirector()->getTouchDispatcher()->addStandardDelegate(this,0);
}
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();
//对每个触碰点做相应处理
}
}
学习的路上,与君共勉。