DidContactBegin 是否一次触发多次

Does DidContactBegin Fire Multiple Times at the One Time

我有一个节点同时与另外两个节点联系。我想知道的是,当我的节点(同时)与其他两个节点联系时,两个 didContactBegin 代码是否同时触发,或者是先处理一个 didContactBegin 然后再处理下一个。

我会认为一个触发然后下一个触发,所以为了让第二个或第三个 didContactBegin 不触发,我设置了一个布尔值和一个计时器。但是在这样做之后,我开始认为 didContactBegin 同时触发,因为我下面的代码似乎经常收到双 println 消息,但并非总是如此。

func didBeginContact(contact: SKPhysicsContact) {

    if contact.bodyA.node?.name == "segment" || contact.bodyB.node?.name == "segment" {

        if boolean == true {
            boolean = false
            timerResetBoolNextAction.invalidate()
            timerResetBoolNextAction = NSTimer.scheduledTimerWithTimeInterval(1, target: self, selector: Selector("ResetBoolean"), userInfo: nil, repeats: false)

            println("boolean is true")
        }

   }  

}


func ResetBoolean() {

    boolNextAction = true

}

无论如何,我想知道的主要是 didContactBegin 是一次性触发还是排队。因为如果确实排队,我相信我的代码一定有其他问题。

它只会进入 if 语句,如果一个 "or" 另一个为真,所以如果它们同时发生,if 语句将读取第一个子句并且它为真并且将继续直接执行你的代码 "once only"。该语句需要在下一帧或循环中再次为真才能再次发生。

希望这能回答您的问题。