Жест щипка в cocos2d, как?

Мне нужно реализовать простой жест щипка в моем проекте cocos2d с двумя или более спрайтами. Не могли бы вы сказать мне, как я могу справиться с тональным жестом?

Мне нужно что-то вроде этого:

-(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;
         }
    }
}

person mr.M    schedule 30.07.2012    source источник


Ответы (1)


Вот что я сделал (мне пришлось довольно много гуглить)

В файле реализации

-(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");
        }
    }
}
person mr.M    schedule 31.07.2012