Как сделать столкновения со скшапеноде кругами
Я работаю над игрой, которая включает в себя обнаружение прикосновения с skShapenodes, которые являются кругами, и не могу найти хороший способ проверить, касаются ли они. Код для класса игрока ниже
-(void)SpawnPlayer
{
_player = [[SKShapeNode alloc] init];
CGMutablePathRef myPath = CGPathCreateMutable();
CGPathAddArc(myPath, NULL, 0,0, 15, 0, M_PI*2, YES);
_player.path = myPath;
_player.lineWidth = 1.0;
_player.fillColor = [SKColor whiteColor];
_player.strokeColor = [SKColor whiteColor];
_player.glowWidth = 0.5;
_location = CGPointMake(375, 400);
_player.position = CGPointMake(375, 400);
_player.physicsBody = [SKPhysicsBody bodyWithCircleOfRadius:0.5];
_player.physicsBody.dynamic = NO;
_player.physicsBody.categoryBitMask = playerCategory;
_player.physicsBody.contactTestBitMask = enemyCategory;
_player.physicsBody.collisionBitMask = 0;
[self addChild:_player];
}
Код противника аналогичен, за исключением того, что его битовая маска и тестовая маска переключаются.
1 ответ
Думайте об этом так: categoryBitMask
определяет тип тела узла. collisionBitMask
указывает, с каким типом тел он может столкнуться. contactTestBitMask
указывает, какой тип contactTestBitMasks будет взаимодействовать с ним.
например, чтобы обнаружить контакт между игроком и врагом, которые имеют разные категории BitMasks, их contactTestBitMasks должны быть:
_player.physicsBody.categoryBitMask = playerCategory;
_player.physicsBody.contactTestBitMask = playerCategory | enemyCategory ;
Для врага:
_enemy.physicsBody.categoryBitMask = enemyCategory;
_enemy.physicsBody.contactTestBitMask = playerCategory | enemyCategory ;
Теперь вы можете справиться с тем, что делать на контакте в didBeginContact
метод