objective-c - 如何在Cocos2d中实现精灵的触摸消失?
怪我咯
怪我咯 2017-04-21 11:19:24
0
1
662

我正在用cocos2d开发一款iPhone2d游戏,其中设置有很多小精灵。我想通过触摸两个类似的精灵的方式,将它们两个都隐藏起来,我如何能够实现这种效果呢?

原问题:How can I detect touch in cocos2d?

怪我咯
怪我咯

走同样的路,发现不同的人生

répondre à tous(1)
PHPzhong

Réponse : Jonas
(Meilleure réponse)
Dans le calque contenant les sprites, vous devez saisir :

self.isTouchEnabled = YES;

Ensuite, vous pouvez utiliser le même événement dans l'UIView, mais la méthode qui les appelle est différente :

- (void)ccTouchesBegan:(NSSet*)touches withEvent:(UIEvent*)event
{
   UITouch* touch = [touches anyObject];
  //in your touchesEnded event, you would want to see if you touched
  //down and then up inside the same place, and do your logic there.
}

Réponse : Térence
Pour obtenir cet effet, vous pouvez définir un cadre de délimitation pour les sprites. Dans le code suivant, je place tous les sprites dans NSMutableArray et vérifie s'ils se trouvent dans le cadre de délimitation. En même temps, je m'assure que le toucher a été initialisé. .Opération :

- (BOOL)ccTouchBegan:(UITouch *)touch withEvent:(UIEvent *)event 
{
  CGPoint location = [self convertTouchToNodeSpace: touch];

  for (CCSprite *station in _objectList)
  {
    if (CGRectContainsPoint(station.boundingBox, location))
    {
      DLog(@"Found sprite");
      return YES;
    }
  }

  return NO;
}

Réponse : David Higgins
Sur la base de la réponse de Jonas, j'ai apporté d'autres améliorations :

- (void)ccTouchesBegan:(NSSet*)touches withEvent:(UIEvent*)event
{
   UITouch* touch = [touches anyObject];
   CGPoint location = [[[Director sharedDirector] convertCoordinate: touch.location];
   CGRect particularSpriteRect = CGMakeRect(particularSprite.position.x, particularSprite.position.y, particularSprite.contentSize.width, particularSprite.contentSize.height);
   if(CGRectContainsPoint(particularSpriteRect, location)) {
     // particularSprite touched
     return kEventHandled;
   }
}

Vous devrez peut-être ajuster la position x/y pour garantir la « position centrale » du sprite.


Réponse : Jean
Le code de David provoquera des messages d'erreur sur Cocos 0.7.3 et 2.2.1, j'ai donc utilisé CGRectMake au lieu de CGMakeRect, et utilisé [touch locationInView:touch.view] pour corriger l'erreur [touch location] :

- (BOOL)ccTouchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {
    UITouch * touch = [touches anyObject];

    CGPoint location = [[Director sharedDirector] convertCoordinate: [touch locationInView:touch.view]];
    CGRect myRect = CGRectMake(sprite.position.x, sprite.position.y, sprite.contentSize.width, sprite.contentSize.height);


    if(CGRectContainsPoint(myRect, location)) {
        // particularSprite touched
        return kEventHandled;
    }
}
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal