SpriteKit - 对多个对象进行接触检测

时间:2014-10-11 18:02:59

标签: ios sprite-kit

我在中间有一个平台,有两个圆圈。

顶部有一个圆圈。底部有一个圆圈。

当底部圆圈触及屏幕顶部时,我想写一条NSLog消息。

当顶部圆圈触及屏幕底部时,我想写一条NSLog消息。

我已将circle1和2设置为categorybitmasks和contactTestBitMasks。我做的任何测试,我只能在顶部或底部圆圈击中屏幕底部时找到,但无法确定如何检测底部圆圈何时触及顶部。我已经开始了我的if语句

-(void)didBeginContact:(SKPhysicsContact *)contact {
// If the top circle touches the bottom edge
 if (contact.bodyA.categoryBitMask == bottomEdgeCategory) {
    NSLog(@"This is the top ball touching the bottom edge");
 }
}

非常感谢任何协助。

1 个答案:

答案 0 :(得分:1)

如果您不熟悉Sprite Kit,请阅读以下有关碰撞检测的教程。

这显示了一个sprite与另一个sprite联系的代码。你要做的是沿着屏幕顶部创建一个薄矩形精灵,沿着底部创建另一个精灵矩形。为它们分配不同的接触位掩码。使用以下教程中的代码,添加联系事件以命中topOfScreenSprite和bottomOfScreenSprite。

http://www.raywenderlich.com/42699/spritekit-tutorial-for-beginners

我的首选版本:

- (void)didBeginContact:(SKPhysicsContact *)contact{

    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==circle1Category && secondBody.categoryBitMask == topOfScreenCategory)
    {
        NSLog('c1: Top Hit');
    }
    else if (firstBody.categoryBitMask==circle1Category && secondBody.categoryBitMask ==    bottomOfScreenCategory)
    {
        NSLog('c1: Bottom Hit');
    }       
    if (firstBody.categoryBitMask==circle2Category && secondBody.categoryBitMask == topOfScreenCategory)
    {
        NSLog('c2: Top Hit');
    }
    else if (firstBody.categoryBitMask==circle2Category && secondBody.categoryBitMask ==    bottomOfScreenCategory)
    {
        NSLog('c2: Bottom Hit');
    }   
}

注意:firstBody将始终是分配给它的值较低的类别。