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

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

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

怪我咯
怪我咯

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

membalas semua(1)
PHPzhong

Jawapan: Jonas
(Jawapan terbaik)
Dalam lapisan yang mengandungi sprite, anda perlu memasukkan:

self.isTouchEnabled = YES;

Kemudian, anda boleh menggunakan acara yang sama dalam UIView, tetapi kaedah yang dipanggil adalah berbeza:

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

Jawapan: Terence
Untuk mencapai kesan ini, anda boleh menetapkan kotak sempadan untuk sprite Dalam kod berikut, saya meletakkan semua sprite dalam NSMutableArray dan semak sama ada ia berada dalam kotak sempadan Pada masa yang sama, pastikan sentuhan telah dimulakan . Operasi:

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

Jawapan: David Higgins
Berdasarkan jawapan Jonas, saya membuat penambahbaikan selanjutnya:

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

Anda mungkin perlu melaraskan kedudukan x/y untuk memastikan "kedudukan tengah" sprite.


Jawapan: John
Kod David akan menyebabkan mesej ralat pada Cocos 0.7.3 dan 2.2.1, jadi saya menggunakan CGRectMake dan bukannya CGMakeRect dan menggunakan [touch locationInView:touch.view] untuk membetulkan ralat [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;
    }
}
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan