Я пытаюсь реализовать функциональность обнаружения столкновения между двумя спрайтами, но только в определенном месте на этих спрайтах. Например, если у меня есть крючок и рыба, и цель игры состоит в том, чтобы поймать рыбу на крючке, тогда только столкновение между точкой крюка и рта или передней частью (например, 10%) рыба должна иметь значение, но не любое другое столкновение. Есть ли простой, встроенный способ проверить это? Если нет, какие-либо указания о том, как это сделать?Как обнаружить столкновения между SKSpriteNodes в определенных местах на узлах спрайтов?
У меня есть следующий стандартный код, который получает точку столкновения на фрейме, к которому я добавляю CGPoint p = contact.contactPoint;
Куда я иду оттуда?
- (void)didBeginContact:(SKPhysicsContact *)contact
{
SKPhysicsBody *firstBody, *secondBody;
if (contact.bodyA.categoryBitMask < contact.bodyB.categoryBitMask)
{
firstBody = contact.bodyA;
secondBody = contact.bodyB;
}
else
{
firstBody = contact.bodyB;
secondBody = contact.bodyA;
}
if ((firstBody.categoryBitMask & hookCategory) != 0 &&
(secondBody.categoryBitMask & fishCategory) != 0)
{
CGPoint p = contact.contactPoint;
[self caught:(SKSpriteNode *) firstBody.node didCatchFish: (Fish *) secondBody.node];
}
}
Спасибо, Андрей, это очень полезно. У вас возникнут какие-либо указания для меня, где искать рекомендации по общему обнаружению столкновений? По какой-то причине я замечаю, что приложение не обнаружит столкновения, пока один спрайт не окажется в центре второго спрайта, в отличие от самой первой координаты x, в которую они пересекаются; Я выгляжу высоко и низко, но, похоже, не может найти объяснения, почему это происходит. – marina
Я знаю только официальную документацию Apple: https://developer.apple.com/LIBRARY/IOS/documentation/GraphicsAnimation/Conceptual/SpriteKit_PG/Physics/Physics.html#//apple_ref/doc/uid/TP40013043-CH6-SW14 –