ios - SWIFT: "didBeginContact"函数中的 If 语句运行次数过多

标签 ios swift if-statement sprite-kit

我的问题是,即使射弹只击中邪恶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/

相关文章:

ios - 如何使用 Swift 从 Xcode 中的代码访问预处理器宏?

javascript - 使用 JavaScript 切换复选框

ios - 如何在Data ViewController的viewDidLoad中加载数据,而不减慢uipageViewController滚动速度?

iOS 键盘键移出屏幕顶部

ios - iOS AVPlayer 无法播放透明视频,怎么办?

ios - AV Foundation 相机扫描盒子内

ios - 具有默认值的 Swift 泛型

swift - 快速将 4 个字节的 Float 给出一个意想不到的小结果

android - 在 android 中需要帮助

bash - bash 中的一行 if 语句