【发布时间】:2014-04-21 10:33:48
【问题描述】:
我正在使用 SpriteKit 构建游戏,但在碰撞检测方面遇到了一些问题。我有SKSpriteNode、Player 和Enemy 的两个子类。它们都应该检测到彼此的碰撞。这是我初始化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 协议,我在它的初始化中有这个:
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;
【问题讨论】:
-
您在哪里以及如何设置位掩码类别值?请发布一些与此相关的代码。
-
@akashg 我编辑了这个问题。
-
将动态属性设置为YES
-
@akashg 我做到了。现在可以使用了,谢谢!
标签: ios objective-c sprite-kit game-physics