2010-05-18 3 views
0

Je développe un module où je sélectionne l'image de la photothèque et la place dans un sprite. Je souhaite appliquer un effet de zoom avant/arrière pour une image d'image-objet, de la même manière que pour les effets d'un zoom avant/arrière. Est-ce que quelqu'un pourrait me guider comment je l'implémente?Comment implémenter l'effet de zoom avant/zoom arrière sur une image d'image-objet cocos2d?

Je vois quelque part est que, je dois détecter deux événements tactiles dans ccTouchBegan, puis ajuster la taille de l'échelle de l'image-objet pour monter ou descendre en fonction de la distance des valeurs d'événement tactile de deux doigts.

Quelqu'un pourrait-il s'il vous plaît me dire:

  • Comment détecter deux doigts touchent des valeurs dans ccTouchBegan?
  • Comment autoriser le toucher et le zoom avant/arrière de l'image-objet par l'utilisateur? S'il vous plaît donnez-moi des échantillons. J'ai déjà essayé quelques trucs de this URL, mais ne fonctionne pas pour mes besoins.

Merci.

+0

Toute aide s'il vous plaît? Je n'ai pas encore réussi avec un code correct? – Getsy

Répondre

1

Il serait plus simple à utiliser pour le geste de reconnaissance zooming:

// on initializing your scene: 
    UIPinchGestureRecognizer* PinchGesture = [[UIPinchGestureRecognizer alloc] initWithTarget: self action: @selector (zoom:)]; 
    [[[Director sharedDirector] openGLView] addGestureRecognizer: PinchGesture]; 
... 
/// zoom callback: 
-(void) zoom: (UIPinchGestureRecognizer*) gestureRecognizer 
{ 
    if (([gestureRecognizer state] == UIGestureRecognizerStateBegan) || ([gestureRecognizer state] == UIGestureRecognizerStateChanged)) 
     yourSprite.scale = [gestureRecognizer scale]; 
} 
1

1) Première étape vous devez créer deux variables.

BOOL canPinch; 
float oldScale; 

2) Utilisez le Brigadir :) réponse et ajoutez ceci dans votre méthode init

UIPinchGestureRecognizer* pinchGesture = [[UIPinchGestureRecognizer alloc] initWithTarget:self action: @selector (zoom:)]; 
[[[CCDirector sharedDirector] openGLView] addGestureRecognizer:pinchGesture]; 

3)

- (void)ccTouchesMoved:(NSSet *)touches withEvent:(UIEvent *)event 
{  
    NSArray* allTouches = [[event allTouches] allObjects]; 
    UITouch* touch = [touches anyObject]; 
    CGPoint location = [self convertTouchToNodeSpace:touch];; 

    CGRect particularSpriteRect = CGRectMake(spriteToZoom.position.x-[spriteToZoom boundingBox].size.width/2, spriteToZoom.position.y-[spriteToZoom boundingBox].size.height/2, [spriteToZoom boundingBox].size.width, [spriteToZoom boundingBox].size.height); 

    if(CGRectContainsPoint(particularSpriteRect, location)) 
    { 
     if ([allTouches count] == 2) 
     {  
      canPinch = YES; 
      return; 
     } 
     else if ([allTouches count] == 1) 
     { 
      CGPoint touchLocation = [self convertTouchToNodeSpace:touch]; 

      CGPoint oldTouchLocation = [touch previousLocationInView:touch.view]; 
      oldTouchLocation = [[CCDirector sharedDirector] convertToGL:oldTouchLocation]; 
      oldTouchLocation = [self convertToNodeSpace:oldTouchLocation]; 

      CGPoint translation = ccpSub(touchLocation, oldTouchLocation);  
      [self panForTranslation:translation]; 
     } 

    } 
    canPinch = NO; 
} 

- (void)panForTranslation:(CGPoint)translation 
{  
    CGPoint newPos = ccpAdd(spriteToZoom.position, translation); 
    spriteToZoom.position = newPos; 
} 

- (void)zoom: (UIPinchGestureRecognizer*) gestureRecognizer 
{ 
    if (canPinch) 
    { 
     if (([gestureRecognizer state] == UIGestureRecognizerStateBegan) || ([gestureRecognizer state] == UIGestureRecognizerStateChanged)) 
     {  
      spriteToZoom.scale = oldScale + [gestureRecognizer scale]-(oldScale != 0 ? 1 : 0); 
     } 
     if ([gestureRecognizer state] == UIGestureRecognizerStateEnded) 
     { 
      oldScale = spriteToZoom.scale; 
     } 
    } 
} 
Questions connexes