Search code examples
objectcocos2d-iphonepinch

Pinch gesture in cocos2d, how to?


I need to implement a simple pinch gesture in my cocos2d project with two or more sprites. Would you be so kind to tell me, how can I handle pitch gesture?

I need something like this:

-(void)handlePinchGesture:(UIPinchGestureRecognizer *)recognizer 
{
    if (recognizer.state != UIGestureRecognizerStateCancelled) 
    {
         if (recognizer.numberOfTouches == 3) 
         {
             CGPoint firstPoint = [recognizer locationOfTouch:0 inView:recognizer.view];
             CGPoint secondPoint = [recognizer locationOfTouch:1 inView:recognizer.view];
             CGPoint thirdPoint = [recognizer locationOfTouch:2 inView:recognizer.view];
             CGPoint fourthPoint = [recognizer locationOfTouch:3 inView:recognizer.view];


             ball1.position=firstPoint;
             ball2.position=secondPoint;
             ball3.position=thirdPoint;
             ball4.position=fourthPoint;
         }
    }
}

Solution

  • Here what I did (it took me quite a lot of googling)

    In implementation file

    -(id)init
    {
        self = [super init];
        self.isTouchEnabled=YES;
    
    
        if (self != nil) 
        {        
    
        }
        return self;   
    }
    //pinch recognising
    -(void)ccTouchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
    {
        NSSet *allUserTouches=[event allTouches];
    
        if(allUserTouches.count==2)
        {
            UITouch* touch1=[[allUserTouches allObjects] objectAtIndex:0];
            UITouch* touch2=[[allUserTouches allObjects] objectAtIndex:1];
    
            CGPoint touch1location=[touch1 locationInView:[touch1 view]];
            CGPoint touch2location=[touch2 locationInView:[touch2 view]];
    
            touch1location=[[CCDirector sharedDirector] convertToGL:touch1location];
            touch2location=[[CCDirector sharedDirector] convertToGL:touch2location];
    
            ball.position=touch1location;
            newBall.position=touch2location;
    
            float currentdist=ccpDistance(touch1location, touch2location);
            oldDist=currentdist;
        }
    }
    
    -(void)ccTouchesMoved:(UITouch *)touch withEvent:(UIEvent *)event
    {
        NSSet *allUserTouches=[event allTouches];
    
        if(allUserTouches.count==2)
        {
            UITouch* touch1=[[allUserTouches allObjects] objectAtIndex:0];
            UITouch* touch2=[[allUserTouches allObjects] objectAtIndex:1];
    
            CGPoint touch1location=[touch1 locationInView:[touch1 view]];
            CGPoint touch2location=[touch2 locationInView:[touch2 view]];
    
            touch1location=[[CCDirector sharedDirector] convertToGL:touch1location];
            touch2location=[[CCDirector sharedDirector] convertToGL:touch2location];
    
            float currentdist=ccpDistance(touch1location, touch2location);
    
            if (oldDist>=currentdist) 
            {
                //[spriteToZoom setScale:spriteToZoom.scale-fabs((oldDist-currentdist)/100)];
                [ball setPosition:touch1location];
                [newBall setPosition:touch2location];
                NSLog(@"pinch out");
            }
            else 
            {
                //[spriteToZoom setScale:spriteToZoom.scale+fabs((oldDist-currentdist)/100)];
                [ball setPosition:touch1location];
                [newBall setPosition:touch2location];
    
                NSLog(@"pinch in");
            }
        }
    }