DidContactBegin一次多次触发

时间:2015-07-29 14:49:50

标签: swift sprite-kit collision skphysicsbody

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

我会想到一个然后是下一个,所以为了使第二个或第三个didContactBegin不会触发,我设置了一个布尔值和一个计时器。但是在这样做之后,我开始认为didContactBegin同时触发两个,因为我的代码似乎经常得到双重打印消息,但不是所有时间。

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是一次性触发还是排队。因为如果它确实排队,我相信我的代码肯定会出现其他问题。

1 个答案:

答案 0 :(得分:2)

如果一个“或”另一个为真,它只会进入if语句,所以如果它们同时发生,if语句将读取第一个子句并且它将为true并将直接执行并执行你的代码“只有一次”。声明在下一帧或循环中需要再次成立才能再次发生。

希望这能回答你的问题。