另一个问题:我调用每次生成精灵的函数。但当我中断游戏时,例如拿起电话或双击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/