Spritekit碰撞检测功能不正常



我正在使用SpriteKit构建游戏,但在冲突检测方面遇到了一些麻烦。我有两个子类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;

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

来自SKPhysicsBody类引用:

动态

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

默认值为YES。如果值为NO,则物理体忽略所有施加在它身上的力和脉冲。

最新更新