在DidBeginContact
我希望在两个机构不接触时得到通知。
我尝试使用!(NOT)
运算符,但它不起作用。
if (!(firstBody.categoryBitMask == kBrickCategory && secondBody.categoryBitMask == kCarCategory)) {
NSLog(@"Hit");
答案 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
中执行此操作。