SpriteKit — сделать перемещение спрайта аналогичным перемещению другого спрайта

#sprite-kit #collision-detection #game-physics

#sprite-kit #обнаружение столкновений #игра-физика

Вопрос:

Я создаю игру типа платформера (например, Super Mario, но в стиле просмотра сверху вниз), и я хочу, чтобы мой главный герой двигался вместе с платформой, с которой он контактирует.

Итак, я использовал это:

 -(void)didBeginContact:(SKPhysicsContact *)contact
{

SKPhysicsBody *firstBody;
SKPhysicsBody *secondBody;

if (contact.bodyA.categoryBitMask < contact.bodyB.categoryBitMask) {
    firstBody = contact.bodyA;
    secondBody = contact.bodyB;
}
else {
    firstBody = contact.bodyB;
    secondBody = contact.bodyA;
}



if (firstBody.categoryBitMask == PlatformCategory || secondBody.categoryBitMask == PlayerCategory) {
_contact = YES;



}
-(void)didSimulatePhysics
{
if (_contact) {
_player.position = CGPointMake(_platform2.position.x, _platform2.position.y       10);
}
}

}
  

Это вроде сработало, и теперь мой плеер движется с этой КОНКРЕТНОЙ платформой, когда касается ее, но это не очень практичный способ сделать это, потому что я буду случайным образом генерировать платформы. Итак, как этого добиться?

Ответ №1:

SKPhysicsBody имеет свойство с именем node, которое является родительским спрайтом, к которому он присоединен. В вашем методе столкновения проверьте, относится ли физическое тело к платформе категории столкновений, затем:

 SKSpriteNode *thisCollidedPlatform = (SKSpriteNode*) nameOfPhysicsBody.node
  

А затем используйте позицию thisCollidedPlatform для установки позиции игрока.