如何与skshapenode圈子进行碰撞

时间:2014-03-28 18:28:16

标签: geometry sprite-kit collision skshapenode

我正在制作一款游戏,它将触摸检测与圈子的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];
}

敌人的代码类似,只是它的位掩码和testbitmask被切换。

1 个答案:

答案 0 :(得分:0)

将其视为: categoryBitMask指定节点的主体类型。 collisionBitMask指定它可以与哪种类型的物体碰撞。 contactTestBitMask指定哪种类型的contactTestBitMasks将与之交互。

e.g。为了检测玩家和敌人之间的联系,它们有不同的categoryBitMasks,他们的contactTestBitMasks应该是:

_player.physicsBody.categoryBitMask = playerCategory;
_player.physicsBody.contactTestBitMask = playerCategory | enemyCategory ;


对于敌人:

 _enemy.physicsBody.categoryBitMask = enemyCategory;
 _enemy.physicsBody.contactTestBitMask =  playerCategory | enemyCategory ;


现在您可以使用didBeginContact方法

处理联系方式