另一个问题:我调用每次生成精灵的函数。但当我中断游戏时,例如拿起电话或双击home按钮并转到任务管理器,我的场景不会停止并继续调用此函数(哦,在该函数中,我每随机调用一次它,因为在didMoveToView中它只调用一次)。当比赛被打断的时候,怎么才能阻止这一幕呢?
谢谢您!

func spawnRocks(){

 if gameOver == 0{

    score++
    scoreLabel.text = "\(score)"

    let rockPosition = arc4random() % UInt32(self.frame.height/1.5)
    var rockAmount = CGFloat(rockPosition) - self.frame.size.height/4

    var rockTexture = SKTexture(imageNamed: randomRock())
    rock = SKSpriteNode(texture: rockTexture)

    rock.setScale(randomRockScale())

    rock.position = CGPointMake(CGRectGetMidX(self.frame) + self.frame.size.width, CGRectGetMidY(self.frame) + rockAmount)

    var moveRock = SKAction.moveByX(-self.frame.size.width*2, y: 0, duration: NSTimeInterval(randomRockMove()))
    var removeRock = SKAction.removeFromParent()
    var moveRemoveRock = SKAction.sequence([moveRock, removeRock])
    rock.runAction(moveRemoveRock)
    rockObject.addChild(rock)

    NSTimer.scheduledTimerWithTimeInterval(NSTimeInterval(randomRockSpeed()), target: self, selector: Selector("spawnRocks"), userInfo: nil, repeats: false)
 }

}

最佳答案

你可以试试这个主意:
首先,当你的应用进入后台时,AppDelegate将调用applicationDidEnterBackground以便你可以在那里设置一个带有NSUserDefaults的bool,你可以在任何地方访问它,这就是你的项目,并按如下方式设置:

func applicationDidEnterBackground(application: UIApplication) {
    NSUserDefaults.standardUserDefaults().setBool(true, forKey: "BackGround")

}

现在,在您的GameViewController.swift中,当您再次像这样加载游戏时使if false为:
override func viewDidLoad() {
    super.viewDidLoad()

    NSUserDefaults.standardUserDefaults().setBool(false, forKey: "BackGround")
}

现在您可以在函数中读取NSUserDefaults,如果bool是真的,您可以这样停止它:
func spawnRocks(){

    let backGround = NSUserDefaults().boolForKey("BackGround")
    if !backGround {

        if gameOver == 0{

            score++
            scoreLabel.text = "\(score)"

            let rockPosition = arc4random() % UInt32(self.frame.height/1.5)
            var rockAmount = CGFloat(rockPosition) - self.frame.size.height/4

            var rockTexture = SKTexture(imageNamed: randomRock())
            rock = SKSpriteNode(texture: rockTexture)

            rock.setScale(randomRockScale())

            rock.position = CGPointMake(CGRectGetMidX(self.frame) + self.frame.size.width, CGRectGetMidY(self.frame) + rockAmount)

            var moveRock = SKAction.moveByX(-self.frame.size.width*2, y: 0, duration: NSTimeInterval(randomRockMove()))
            var removeRock = SKAction.removeFromParent()
            var moveRemoveRock = SKAction.sequence([moveRock, removeRock])
            rock.runAction(moveRemoveRock)
            rockObject.addChild(rock)

            NSTimer.scheduledTimerWithTimeInterval(NSTimeInterval(randomRockSpeed()), target: self, selector: Selector("spawnRocks"), userInfo: nil, repeats: false)
        }
    }
}

之后,当用户从后台再次打开应用程序时,可以通过以下方式从AppDelegate再次设置bool false:
func applicationWillEnterForeground(application: UIApplication) {
    NSUserDefaults.standardUserDefaults().setBool(false, forKey: "BackGround")
}

希望对你有帮助。

关于ios - 游戏中断时暂停场景,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31356556/

10-14 19:56
查看更多