我使用 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 是批处理节点中的整个纹理。我应该用什么?