我的问题是,即使射弹只击中邪恶Flappy一次,其中包含scoreUpOne()的if语句也会运行太多次。 这是我的代码:
func scoreUpOne() {
if scoreUp == true{
scoreLabel = scoreLabel++
myScene.scoreLabel.text = "\(scoreLabel)"
scoreUp = false
}
}
func evilFlappyRespawnTimer(timer : NSTimer){
evilFlappy.position = CGPointMake(940, 320)
evilFlappy.hidden = false
}
func didBeginContact(contact: SKPhysicsContact) {
if (contact.bodyA.node?.name == "projectile" && contact.bodyB.node?.name == "bottomBolt"){
projectile.hidden = true
}else if (contact.bodyA.node?.name == "projectile" && contact.bodyB.node?.name == "topBolt"){
projectile.hidden = true
}else if (contact.bodyA.node?.name == "topBolt" && contact.bodyB.node?.name == "projectile"){
projectile.hidden = true
}else if (contact.bodyA.node?.name == "bottomBolt" && contact.bodyB.node?.name == "projectile"){
projectile.hidden = true
}
if (contact.bodyA.node?.name == "projectile" && contact.bodyB.node?.name == "evilFlappy") {
projectile.hidden = true
evilFlappy.hidden = true
scoreUp = true
scoreUpOne()
NSTimer.scheduledTimerWithTimeInterval(2.0, target: self, selector: "evilFlappyRespawnTimer:", userInfo: nil, repeats: false)
}
else if (contact.bodyA.node?.name == "evilFlappy" && contact.bodyB.node?.name == "projectile"){
evilFlappy.hidden = true
projectile.hidden = true
scoreUp = true
scoreUpOne()
NSTimer.scheduledTimerWithTimeInterval(2.0, target: self, selector: "evilFlappyRespawnTimer:", userInfo: nil, repeats: false)
}
if (contact.bodyA.node?.name == "flappy" && contact.bodyB.node?.name == "sprite") {
gameOver()
}
else if (contact.bodyA.node?.name == "sprite" && contact.bodyB.node?.name == "flappy") {
gameOver()
}
问题是这些 if 语句运行了太多次,导致分数上升了不止一分:
if (contact.bodyA.node?.name == "projectile" && contact.bodyB.node?.name == "evilFlappy") {
projectile.hidden = true
evilFlappy.hidden = true
scoreUp = true
scoreUpOne()
NSTimer.scheduledTimerWithTimeInterval(2.0, target: self, selector: "evilFlappyRespawnTimer:", userInfo: nil, repeats: false)
}
else if (contact.bodyA.node?.name == "evilFlappy" && contact.bodyB.node?.name == "projectile"){
evilFlappy.hidden = true
projectile.hidden = true
scoreUp = true
scoreUpOne()
NSTimer.scheduledTimerWithTimeInterval(2.0, target: self, selector: "evilFlappyRespawnTimer:", userInfo: nil, repeats: false)
}
如何才能让弹丸每击中邪恶Flappy 一次,分数只上升一分?
如有任何建议,我们将不胜感激。谢谢。
最佳答案
你为什么还要使用 ScoreUp?没有理由有这个条件。
如果分数增加,则更新 UI。您可以在分数变量上设置键值观察 (KVO) 以查看其何时更新并相应地更新 UI。或者,您可以在分数更新时发布通知,并且您的 View 可以监听并更新。
关于ios - SWIFT: "didBeginContact"函数中的 If 语句运行次数过多,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32081007/