[ios]Spritekit-碰撞 & 接触问题

发布时间: 2017/3/23 0:42:54
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

我可以通过摆式装置倾斜的屏幕底部有一个物体。它可以受到高空掷物,随意的落下,发生这种情况时,它将显示"游戏结束了 !"。然而,如果它打在墙上 (如下面的代码所示),它将显示"游戏结束 !"的讯息。如何解决此问题?我希望它能够撞到墙上什么也没有发生。(我将添加当前的代码以及接触的委托)。

墙上的代码︰

//Left Wall
SKNode *node = [SKNode node];
node.physicsBody = [SKPhysicsBody bodyWithEdgeLoopFromRect:CGRectMake(0.0f, 0.0f, 1.0f, CGRectGetHeight(self.frame))];
[self addChild:node];


// Right wall
node = [SKNode node];
node.physicsBody = [SKPhysicsBody bodyWithEdgeLoopFromRect:CGRectMake(CGRectGetWidth(self.frame) - 1.0f, 0.0f, 1.0f, CGRectGetHeight(self.view.frame))];
[self addChild:node];

联系人委托的的代码︰

#pragma mark contact delegate
- (void)didBeginContact:(SKPhysicsContact *)contact {
    //Create two physics body objects
    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 & dodgerCategory) != 0) {
       [secondBody.node removeFromParent];
       self.takenHits++;
    }if (self.takenHits >= 1) {
       //Game Over
       UIAlertView* alert = [[UIAlertView alloc] initWithTitle:@"Game Over."
       message:@"You have been hit!" delegate:self
       cancelButtonTitle:@"Ok" otherButtonTitles:nil, nil];
       [alert show];
       self.paused = YES;
   } 
}

解决方法 1:

您需要设置隔离墙的 contactTestBitMask 为零,以便它不与其他物体接触测试 (或设置所需的位必须用特定的对象测试,如果你需要到)

node.physicsBody.contactTestBitMask = 0;

将它设置为两个墙节点。

为了使球与墙壁碰撞到产权类别位设置他们的 collisionBitMask:

ballNode.categoryBitMask = <Ball category bit>
ballNode.collisionBitMask = <wall category bit>

leftWallNode.categoryBitMask = <wall category bit>
leftWallNode.collisionBitMask = <ball category bit>

rightWallNode.categoryBitMask = <wall category bit>
rightWallNode.collisionBitMask = <ball category bit>

总之 categoryBitMask 在物理世界中定义"对哪一类将我属于"和 collisionBitMask 定义"与哪些类别可以碰撞与在物理世界"

如果你有问题定义位让我知道 (使用 0x01,0x02,0x04,0x08 等。......)

官方微信
官方QQ群
31647020