Spritekit碰撞检测无法正常运行

时间:2014-04-21 10:33:49

标签: ios objective-c sprite-kit game-physics

我正在使用SpriteKit来构建一个游戏,并且在碰撞检测方面遇到了一些麻烦。我有2个SKSpriteNodePlayerEnemy的子类。它们都应该检测彼此的碰撞。以下是我如何初始化Player对象的physicsBody

self.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:self.size];
self.physicsBody.affectedByGravity = NO;
self.physicsBody.dynamic = NO;
self.physicsBody.usesPreciseCollisionDetection = YES;
self.physicsBody.categoryBitMask = playerCategory;
self.physicsBody.collisionBitMask = enemyCategory;
self.physicsBody.contactTestBitMask = enemyCategory;

以下是我如何初始化Enemy对象physicsBody

self.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:self.size];
self.physicsBody.affectedByGravity = NO;
self.physicsBody.dynamic = NO;
self.physicsBody.usesPreciseCollisionDetection = NO;
self.physicsBody.categoryBitMask = enemyCategory;
self.physicsBody.collisionBitMask = playerCategory;
self.physicsBody.contactTestBitMask = playerCategory;

我的GameScene实现了SKPhysicsContactDelegate协议,我在其init中有这个:

self.physicsWorld.gravity = CGVectorMake(0.0, 0.0);
self.physicsWorld.contactDelegate = self;

然而,didBeginContact方法并没有被调用。我尝试在场景中创建对象之后初始化physicsBodies,但仍然没有。我做错了什么?

更新1

以下是bitMasks中代码的代码,它位于Common.h文件中导入的Prefix.pch文件中。

static const uint32_t enemyCategory = 0x1 <<0;
static const uint32_t playerCategory = 0x1 <<1;

1 个答案:

答案 0 :(得分:1)

您需要为您的节点将physicsBody.dynamic设置为YES。

来自SKPhysicsBody类参考:

  

动态

     

一个布尔值,指示物理实体是否   被物理模拟所感动。

     

默认值为YES。如果值为NO,那么物理体   忽略了适用于它的所有力量和冲动。