如果两个机构没有联系,如何收到通知?

时间:2016-03-17 00:13:52

标签: ios objective-c sprite-kit

DidBeginContact我希望在两个机构不接触时得到通知。

我尝试使用!(NOT)运算符,但它不起作用。

if (!(firstBody.categoryBitMask == kBrickCategory && secondBody.categoryBitMask == kCarCategory)) {
    NSLog(@"Hit");

1 个答案:

答案 0 :(得分:1)

didBeginContact仅在发生碰撞时被调用。如果发生冲突,您可以在Bool中将update设置为false并在true中设置didBeginContact。在didFinishUpdate中查看并采取相应措施。

示例代码在Swift中,但应该很容易转换为Objective-C。

class MyScene: SKScene, SKPhysicsContactDelegate {

    var contactMadeThisFrame = false

    override func update(currentTime: NSTimeInterval) {
        contactMadeThisFrame = false
    }

    func didBeginContact(contact: SKPhysicsContact) {
        let firstBody = contact.bodyA
        let secondBody = contact.bodyB
        if firstBody.categoryBitMask == kBrickCategory && secondBody.categoryBitMask == kCarCategory {
            contactMadeThisFrame = true
        }
    }

    override func didFinishUpdate() {
        if !contactMadeThisFrame {
            print("Hit")
        }
    }
}

如果要基于每个节点检查(仅对未联系的节点执行操作),则可以遍历实体并检查physicsBody.allContactedBodies计数是否为零。在didFinishUpdate中执行此操作。