ios - 未调用 SpriteKit didBeginContact 函数

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

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

我的问题是当球从砖 block 上弹开时根本没有调用该函数。这就是我设置它们的方式:

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];

我这辈子都看不出这有什么问题,因为我认为类别位掩码是正确的?此外,这两个 Sprite 都是动态的,这是我读到的另一个问题。

这并不是我的 didBeginContact 函数的内容不起作用,它只是从未到达那里,因为缺少 NSLog 消息和未达到断点。

如有任何帮助,我们将不胜感激。

谢谢。

最佳答案

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

关于ios - 未调用 SpriteKit didBeginContact 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29238830/

相关文章:

iphone - 在 2 个 ViewController 之间导航

ios - 如何在 RootView ChildViewControllers 中隐藏 TabBar

ios - UITabBarItem 图像在单击时正在更改图像

iOS 6 和 iOS 7 UIButton 标签垂直对齐

ios - 弃用字体的大小

ios - 高度错误的模态 UINavigationController 栏

objective-c - si_user_byuid/getpwuid 中的内存泄漏源自 iOS 中的 CPSharedResourcesDirectory

ios - 在 Touches 中获取 SKSpriteNode 的属性

swift - 将节点链接到另一个节点 SpriteKit - Swift

ios - Spritekit - 对物理体应用加速度