在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中执行此操作。