【发布时间】:2014-11-15 11:09:01
【问题描述】:
我正在使用 Sprite Kit 来检测两个对象之间的碰撞。下面是我如何定义它们的位掩码。
static const uint32_t puffinCategory = 0x1 << 0;
static const uint32_t planeCategory = 0x1 << 1;
这是我关于如何设置海雀和飞机物理体的代码。 海雀用
SKSpriteNode *PuffinNode = [[SKSpriteNode alloc]initWithImageNamed:@"puffin"];
PuffinNode.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:PuffinNode.size];
PuffinNode.physicsBody.usesPreciseCollisionDetection = YES;
PuffinNode.physicsBody.categoryBitMask = puffinCategory;
PuffinNode.physicsBody.dynamic = NO;
PuffinNode.physicsBody.collisionBitMask = puffinCategory;
PuffinNode.physicsBody.contactTestBitMask = planeCategory;
[PuffinNode setZPosition:1.5];
飞机
SKSpriteNode *planeSpriteNode = [[SKSpriteNode alloc]initWithImageNamed:planeStringFileName];
planeSpriteNode.position = CGPointMake(0, self.view.frame.size.height*-1);
planeSpriteNode.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:planeSpriteNode.size];
planeSpriteNode.physicsBody.usesPreciseCollisionDetection = YES;
planeSpriteNode.physicsBody.categoryBitMask = planeCategory;
planeSpriteNode.physicsBody.dynamic = NO;
planeSpriteNode.physicsBody.collisionBitMask = puffinCategory;
planeSpriteNode.physicsBody.contactTestBitMask = puffinCategory;
这是我对委托方法 didBeginContact 的实现:
-(void)didBeginContact:(SKPhysicsContact *)contact{
NSLog(@"collission method run");
SKPhysicsBody *firstBody, *secondBody;
if (contact.bodyA.categoryBitMask < contact.bodyB.categoryBitMask){
firstBody = contact.bodyA;
secondBody = contact.bodyB;
}else{
firstBody = contact.bodyB;
secondBody = contact.bodyA;
}
if ((firstBody.categoryBitMask & puffinCategory) != 0 && (secondBody.categoryBitMask & planeCategory) != 0 ){
NSLog(@"collission occured");
}
}
如果调用方法,我看不到日志记录,当两个精灵碰撞时我也看不到日志。
【问题讨论】:
-
你不是忘了设置
SKScene的physicsWorld.contactDelegate吗? -
这是在 didMoveToView 方法中完成的。
标签: ios sprite-kit