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回タップしたらダブルタップですよってことです。
よくマウスの左クリックでも設定するやつです。