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

本文介绍了在cocos2d中实现双击事件响应的两种方法:通过touch中的tapCount属性判断点击次数和使用UITapGestureRecognizer。详细解释了每种方法的实现步骤,并通过碰撞检测定位到具体的sprite。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


这篇文章介绍两种方式处理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。





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值