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

Cocos2d-iphone 为sprite添加双击的事件响应

2013-08-03 21:59 232 查看
这篇文章介绍两种方式处理cocos2d中的双击事件响应。

在iOS中使用UITapGestureRecognizer ,很容易就可以添加双击事件处理,但是在cocos2d中无法直接向sprite添加UITapGestureRecognizer,所以就要做一些处理。

说明:我现在是想向一个sprite 添加一个双击的事件响应。

第一种方法是比较简单的,使用touch中的tapCount这个属性就可以判断是tap的次数。

代码如下:

-(void)ccTouchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{

for (UITouch *touch in touches) {

if ([touch tapCount] == 1) {
NSLog(@"single tap!");
}
else if ([touch tapCount] == 2) {
NSLog(@"double tap!");
}

}
}


这里根据tapCount获知是单击和双击,然后再由touch获取到touch的坐标点,有这个坐标点再和我们要添加双击事件的sprit做碰撞检测,就是做
CGRectContainsPoint()的判断,那么就可以将双击事件定位到我们要的sprite。

下面介绍第二种方法。

这里我们还是要使用到UITapGestureRecognizer,但是添加的时候有一点技巧。

UITapGestureRecognizer *doubleTapGesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapAction:)];
doubleTapGesture.numberOfTapsRequired = 2;
[[[CCDirector sharedDirector] view] addGestureRecognizer:doubleTapGesture];


-(void)tapAction:(UITapGestureRecognizer *)recognizer {

NSLog(@"double tap");
//这样获取到的坐标位置是以左上角为原点的坐标系
CGPoint doubleTapPoint = [recognizer locationInView:recognizer.view];
//通过转换,将坐标系换成是以左下角为原点的坐标系
doubleTapPoint = [[CCDirector sharedDirector] convertToGL:doubleTapPoint];

NSLog(@"tap point = %@",NSStringFromCGPoint(doubleTapPoint));

for (CCSprite *sprite in spriteArray) {
//做碰撞检测
if (CGRectContainsPoint(sprite.boundingBox, doubleTapPoint)) {

}
}
}


和第一种方法一样,我们也要通过碰撞检测定位到双击是到哪一个sprite。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: