読者です 読者をやめる 読者になる 読者になる

cocos2dでダブルタップを判別

-(void)ccTouchEnded:(UITouch *)touch withEvent:(UIEvent *)event
{
    CGPoint location = [[CCDirector sharedDirector] convertToGL:[touch locationInView:[touch view]]];
    location = [self convertToNodeSpace:location];

    float delay = 0.2f;

    switch (touch.tapCount) {
        case 2:
            [NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(singleTap:) object:[NSValue valueWithCGPoint:location]];
            [self doubleTap:[NSValue valueWithCGPoint:location]];
            break;
        case 1:
            [self performSelector:@selector(singleTap:) withObject:[NSValue valueWithCGPoint:location] afterDelay:delay];
            break;
        default:
            break;
    }
}

-(void)singleTap:(NSValue*)location
{
     CGPoint point = [location CGPointValue];

     //Do something when it sense single-tap
}


-(void)doubleTap:(NSValue*)location
{
     CGPoint point = [location CGPointValue];

     //Do something when it sense double-tap
}

こんな感じに実装していただければと。

locationをNSValueにして渡してるのは引数がid型しか受け付けないからですね。

delayは1回タップしたときから、何秒以内に次のタップイベントを取得したら、それをダブルタップと判断するかです。
要はdelay秒以内に2回タップしたらダブルタップですよってことです。

よくマウスの左クリックでも設定するやつです。