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"。该语句需要在下一帧或循环中再次为真才能再次发生。
希望这能回答您的问题。
我有一个节点同时与另外两个节点联系。我想知道的是,当我的节点(同时)与其他两个节点联系时,两个 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"。该语句需要在下一帧或循环中再次为真才能再次发生。
希望这能回答您的问题。