如何将游戏计时器耗时传递至Game Over界面ViewController
嘿,我来帮你搞定这个游戏计时器的问题~看起来核心问题就是角色死亡时没及时把当前耗时存下来,导致切到Game Over界面时数据直接重置了。针对你用Stopwatch和Game Over界面两个ViewController的场景,给你几个实用的解决思路:
解决游戏计时器在Game Over界面的传递与保存问题
方案1:界面跳转时直接传值(最直接)
这是VC间传数据的常规操作,关键是在角色死亡的瞬间先把计时器暂停并抓下当前值:
- 先在你的Game Over界面VC里加个接收耗时的属性:
// Swift示例,OC逻辑完全一致 var finalElapsedTime: TimeInterval = 0.0
- 在
StopwatchVC里,检测到角色死亡时,立刻暂停计时器、获取当前耗时,再给Game Over VC赋值后跳转:
// 先停计时器,避免时间继续走 stopwatchTimer.invalidate() // 假设你用elapsedTime存当前已跑的时间 let currentTime = elapsedTime // 初始化Game Over界面 let gameOverVC = GameOverViewController() gameOverVC.finalElapsedTime = currentTime // 按你的导航方式跳转,push或者present都行 navigationController?.pushViewController(gameOverVC, animated: true)
- 最后在Game Over VC里,把
finalElapsedTime转成00:00:00的格式显示就好。
方案2:用单例做全局状态管理(适合多界面共享)
如果后续还有其他界面要用到计时器状态,单例会更省心,不用来回传值:
- 写个单例类专门管计时器:
class GameTimerManager { // 单例实例,全局唯一 static let shared = GameTimerManager() private init() {} // 存当前耗时 var elapsedTime: TimeInterval = 0.0 // 计时器对象 var timer: Timer? // 启动计时器 func startTimer() { timer?.invalidate() timer = Timer.scheduledTimer(withTimeInterval: 0.1, repeats: true) { [weak self] _ in self?.elapsedTime += 0.1 } } // 暂停并保存当前时间 func pauseTimer() { timer?.invalidate() // elapsedTime自动保留当前值,不用额外存 } // 重置计时器 func resetTimer() { elapsedTime = 0.0 timer?.invalidate() } }
- 在
StopwatchVC里启动计时器时,直接用单例:
GameTimerManager.shared.startTimer()
- 角色死亡时,调用暂停:
GameTimerManager.shared.pauseTimer()
- 到Game Over VC里直接拿值就行:
let finalTime = GameTimerManager.shared.elapsedTime // 转格式显示
方案3:用UserDefaults临时存储(怕重启丢失的话用这个)
如果担心游戏重启(比如从Game Over界面回到游戏主菜单再开新局)还能拿到上次的耗时,用UserDefaults临时存一下:
- 角色死亡时存值:
// 把当前耗时存到UserDefaults UserDefaults.standard.set(elapsedTime, forKey: "LastGameElapsedTime")
- 在Game Over VC里读取:
let finalTime = UserDefaults.standard.double(forKey: "LastGameElapsedTime") // 显示完记得删掉,不然下次会读到旧数据 UserDefaults.standard.removeObject(forKey: "LastGameElapsedTime")
关键提醒!
一定要在角色死亡的第一时间暂停计时器并保存值,别等界面跳转完再处理——不然可能因为Stopwatch VC被销毁,计时器数据直接没了,或者计时器还在偷偷跑,导致时间不准。
内容的提问来源于stack exchange,提问作者user9611921
相关产品推荐
相关产品推荐

