Я использую 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 - это целоетекстура в узле пакета. Что мне использовать?