0

我使用 boundingBox 来检查碰撞,它可以用于触摸,但根本不适用于 2 个精灵的碰撞,(它们都是圆形的,但它们的边界框是矩形的)

那么有没有更好的方法?(如果您在下面修改我的代码,那就太好了:

-(bool) isFishCollidingWithRect:(CGRect) rect
{
     FishEntity* fish;
     CCARRAY_FOREACH(fishes, fish)
     {
        if (fish.visible && CGRectIntersectsRect([fish boundingBox], rect)) {
             [fish gotHit];
             return YES;
         }
      }
      return NO;
}

我认为有一种获得较小矩形的好方法,它介于原始矩形和顶点刚刚接触圆的矩形之间。尺寸很容易得到,但坐标很难,因为矩形可能有旋转,我的数学很烂

-(bool) isBirdCollidingWithSprite:(CCSprite*) sprite
 {
     BirdEntity* bird;
     CCARRAY_FOREACH(birdsAlone, bird)
     {
         float distance = sqrt((bird.anchorPoint.x - sprite.anchorPoint.x) * (bird.anchorPoint.x - sprite.anchorPoint.x) + (bird.anchorPoint.y - sprite.anchorPoint.y) * (bird.anchorPoint.y - sprite.anchorPoint.y)); 
         if (bird.visible && (bird.contentSize.width / 2 + sprite.contentSize.width / 2) >= distance) {
             if ([bird inBubble] == NO) {
                 [bird bubbled];
             }
             return YES;
         }
     }
     return NO;
 }

好吧,鱼总是会被击中,我相信 contentSize 是批处理节点中的整个纹理。我应该用什么?

4

1 回答 1

0

因为都是圈子,所以很简单。只需检查两个圆的中心之间的距离。如果它大于圆的半径之和,则精灵不会接触。如果它更少,它们就会重叠。如果它是平等的,他们只是接触。

于 2011-03-18T16:24:19.910 回答