Как сделать столкновения со скшапеноде кругами

Я работаю над игрой, которая включает в себя обнаружение прикосновения с 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 метод

Другие вопросы по тегам