Cocos2d-x触摸事件实例(2)
接下来学习多点触摸,多点触摸和单点触摸不同的是它的优先级要低于单点触摸,不论注册的时候里边传入的数字是多少,当然还有其它的一些区别,让我
接下来学习多点触摸,多点触摸和单点触摸不同的是它的优先级要低于单点触摸,不论注册的时候里边传入的数字是多少,当然还有其它的一些区别,让我们看代码吧。以下是在windows上演示的效果,windows上没法实现多点触摸。
bool HelloWorld::init()
{
bool bRet = false;
do
{
CC_BREAK_IF(! CCLayer::init());
//实现拖拽精灵移动的效果
CCSprite * sprite = CCSprite::create("image2.png");
sprite->setPosition(ccp(240,180));
this->addChild(sprite,0,0);
//开启触摸
this->setTouchEnabled(true);
bRet = true;
} while (0);
return bRet;
}
void HelloWorld::registerWithTouchDispatcher()
{
//注册多点触摸,里边只有俩个参数
CCDirector::sharedDirector()->getTouchDispatcher()->addStandardDelegate(this,0);
}
//在多点触摸中,这四个协议函数在touch后边都加了es,并且每个协议函数不需要都实现,所有的返回值都是void
//CCSet是CCTouch的集合
void HelloWorld::ccTouchesBegan(CCSet * set,CCEvent * pEvent)
{
//CCSetIterator是一个迭代器
CCSetIterator iterator;
//以下的方法就是从CCSet中获得对象的方法
for(iterator = set->begin();iterator != set->end();iterator++)
{
//将元素强制转化为CCTouch *类型
CCTouch * touch = (CCTouch *)(*iterator);
CCPoint point = touch->getLocation();
CCSprite * sprite = CCSprite::create("image.png");
sprite->setPosition(point);
this->addChild(sprite);
}
}
接下来利用上边的多点触摸消息实现精灵的放大和缩放效果,大家看到的相册图片放大和缩小的效果也是这么实现的,但是windows不支持多点,所以这里只是说明原理。
查看源代码打印帮助
bool HelloWorld::init()
{
bool bRet = false;
do
{
CC_BREAK_IF(! CCLayer::init());
//实现拖拽精灵移动的效果
CCSprite * sprite = CCSprite::create("image2.png");
sprite->setPosition(ccp(240,180));
this->addChild(sprite,0,0);
//开启触摸
this->setTouchEnabled(true);
bRet = true;
} while (0);
return bRet;
}
void HelloWorld::registerWithTouchDispatcher()
{
//注册多点触摸,里边只有俩个参数
CCDirector::sharedDirector()->getTouchDispatcher()->addStandardDelegate(this,0);
}
void HelloWorld::ccTouchesBegan(CCSet * set,CCEvent * pEvent)
{
CCSetIterator iterator = set->begin();
//获得第一个触摸点
CCTouch * touch0 = (CCTouch *)(*iterator);
iterator++;
//程序执行到这里会死掉,因为windows只支持单点触摸,不支持多点,所以这里是不会获得第二个点的
CCTouch * touch1 = (CCTouch *)(*iterator);
length = ccpDistance(touch0->getLocation(),touch1->getLocation());
}
void HelloWorld::ccTouchesMoved(CCSet * set,CCEvent * pEvent)
{
CCSetIterator iterator = set->begin();
CCTouch * touch0 = (CCTouch *)(*iterator);
iterator++;
CCTouch * touch1 = (CCTouch *)(*iterator);
float length2 = ccpDistance(touch0->getLocation(),touch1->getLocation());
float times = length2/length;
CCSprite * sprite = (CCSprite *)this->getChildByTag(0);
sprite->setScale(times);
}
精彩图集
精彩文章






