DidBeginContact中,当两个物体不接触时,我希望收到通知。

我尝试使用!(NOT)运算符,但是没有用。

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

最佳答案

didBeginContact仅在发生碰撞时被调用。您将Bool中的update设置为false,如果发生冲突,则将其true中的didBeginContact设置为didFinishUpdate。在physicsBody.allContactedBodies中检查它并采取相应的措施。

示例代码在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")
        }
    }
}

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

10-07 14:17