我该如何防止两种不同的SpriteKit节点相互碰撞?

5

我正在使用苹果的Sprite Kit编写一个小游戏。

我在碰撞检测方面遇到了麻烦。 有时我不希望两个具有physicsBodys属性的skSpriteNodes相互作用。

例如,我有一个HERO(英雄),ENEMYS(敌人)和SHOTS(射击),我只希望SHOTS与ENEMYS相互作用。

但是当两个子弹相互碰撞时,它们会改变位置!

子弹的代码如下:

   shot.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:shot.size];
   shot.physicsBody.dynamic = YES;
   shot.physicsBody.allowsRotation = FALSE;
   shot.physicsBody.categoryBitMask = playerShotCategory;
   shot.physicsBody.contactTestBitMask = enemyCategory;

敌人的代码如下:
   activeGameObject.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:activeGameObject.size];
    activeGameObject.physicsBody.dynamic = YES;
    activeGameObject.physicsBody.categoryBitMask = enemyCategory;
    activeGameObject.physicsBody.contactTestBitMask = playerCategory | playerShotCategory;
    activeGameObject.physicsBody.allowsRotation = FALSE;

3
“playerShotCategory”、“enemyCategory”和“playerCategory”是什么? - Mike Pollard
1个回答

6

如果您只想让子弹与敌人互动,您需要添加以下代码:

shot.physicsBody.collisionBitMask = enemyCategory;
activeGameObject.physicsBody.collisionBitMask = playerShotCategory|playerCategory;

查看collisionBitMask文档以获取更多信息。如果您希望其他类别参与碰撞,可能需要调整collisionBitMask。


谢谢,它很好用。我不理解.collisionbitmask的含义。 - Apostolos

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接