没有调用SpriteKit didBeginContact函数

时间:2015-03-24 17:10:14

标签: ios objective-c sprite-kit collision-detection

我正在尝试使用didBeginContact函数在我的SpriteKit游戏中进行碰撞。

我的问题是,当球从砖块反弹时,该功能根本就没有被调用。这就是我如何设置它们的方式:

static const uint32_t blockCollisionCheck = 0x1 << 0;
static const uint32_t ballCollisionCheck = 0x1 << 1;

球:

SKShapeNode *ball = [[SKShapeNode alloc] init];

CGMutablePathRef drawPath = CGPathCreateMutable();
CGPathAddArc(drawPath, NULL, 0, 0, _ballRadius, 0, M_PI * 2, YES);
ball.path = drawPath;
CGPathRelease(drawPath);

ball.fillColor = [SKColor greenColor];

ball.position = CGPointMake(CGRectGetMidX(self.frame), 150);
ball.name = @"ball";


ball.physicsBody = [SKPhysicsBody bodyWithCircleOfRadius:_ballRadius];
ball.physicsBody.friction = 0.0;
ball.physicsBody.restitution = 1.0;
ball.physicsBody.linearDamping = 0.0f;
ball.physicsBody.allowsRotation = NO;
ball.physicsBody.dynamic = YES;
ball.physicsBody.categoryBitMask = ballCollisionCheck;
ball.physicsBody.contactTestBitMask = blockCollisionCheck;
[self addChild:ball];

砖:

SKSpriteNode *block = [SKSpriteNode spriteNodeWithColor:[SKColor redColor] size:CGSizeMake(_blockWidth, _blockHeight)];
block.name = @"block";
block.position = CGPointMake(x, y);
block.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:block.size];
block.physicsBody.allowsRotation = NO;
block.physicsBody.friction = 0.0;
block.physicsBody.dynamic = YES;
block.physicsBody.categoryBitMask = blockCollisionCheck;
block.physicsBody.contactTestBitMask = ballCollisionCheck;
[self addChild:block];

我不能为我的生活看到这有什么问题,因为我认为类别位掩码正确吗?这两个精灵都是动态的,这是我读过的另一个问题。

并不是因为我的didBeginContact函数的内容无法正常工作,而是因为缺少NSLog消息和无法到达断点而无法实现这一点。

非常感谢任何帮助。

谢谢。

1 个答案:

答案 0 :(得分:2)

正如你所说,如果没有调用didBeginContact方法,我怀疑你没有将self.physicsWorld.contactDelegate = self;添加到你的GameScene init方法中。

相关问题