如果我理解正确的话,你有两个问题;一种是关于在任何场景下都显示能量条,另一种是用于计算应用程序关闭期间获得的能量。
关于第一个问题(全场景显示能量条)你可以看看SKReferenceNode
我在其中一款带有全局菜单的游戏中所做的是:
我为菜单创建了一个单独的 SpriteKit 场景(.sks 文件)。然后我在 GameScene.sks 文件中添加了 SKReferenceNode。在 GameScene.swift 文件中,我只是将 ReferenceNode 视为普通的 SKSpriteNode,如下所示:
class GameScene: SKScene {
// Reference node added in GameScene.sks
var playerHealthBar : SKSpriteNode!
override func didMove(to view: SKView) {
// Reference node
playerHealthBar = self.childNode(withName: “//playerHealthBar”) as? SKSpriteNode
}
}
使用 SKReferenceNode,您可以在我们所有的场景中实现该节点。然后,您将能够随时更新节点。我使用这种方法在我的游戏中创建全局菜单栏(例如,可以显示用户金币、健康点等)
对于有关 playerHealthBar 的数据(例如健康点),您可以从 UserDefaults 加载/保存。
至于第二个问题,一个想法是在 UserDefaults 中存储一个名为 lastActive 的变量。当应用程序进入后台时更新此值。
当应用程序进入前台时,您需要将当前时间与lastActive 变量进行比较。
看看这个:
func timeSpentAwayInSeconds() -> Int {
// We then check when the player was last active
let lastActive = UserDefaults.standard.object(forKey: "lastActive")
// Then we compare that to the current date
let elapsedTime = Date().timeIntervalSince(lastActive as! Date)
// Covert that to seconds
let elapsedTimeInSeconds : Int = Int(elapsedTime)
return elapsedTimeInSeconds
}
我希望这会有所帮助。如果它解决了您的问题,请标记为已回答:-)
编码愉快!