我想知道是否可以暂停currentTime in - (void)更新:(CFTimeInterval)currentTime
我成功暂停了我的场景:
self.view.paused=YES;
self.paused=YES;
self.scene.view.paused = YES;
它有效但在 - (void)更新我有这个方法:
[_landscape update:currentTime];
问题是即使场景暂停,currentTime也不会停止增加。 在我恢复场景后,我的_landscape速度发生了变化。
答案 0 :(得分:1)
我不知道你是否已经找到了这个问题的答案,但这是我认为可以解决你的问题的解决方案。您需要做的是将游戏的当前时间设置为零,因此当暂停游戏时,将不会有时间流逝。换句话说,整个动画将停止并将在您暂停游戏的那一刻恢复。我在更新中使用此方法来停止当前时间。
if (_lastUpdateTime) {
_dt = currentTime - _lastUpdateTime;
} else {
_dt = 0;
}
_lastUpdateTime = currentTime;
if (_pauseButtonPressed) {
_lastUpdateTime = 0;
return;
}
第一部分设置当前时间和增量时间,第二部分将当前时间设置为零(如果游戏暂停)。希望这会帮助你。:))
答案 1 :(得分:0)
我将我的Swift版本基于Adrian P的答案。
在我的游戏场景中,我有一个属性lastUpdateTime
。当游戏暂停时,此属性设置为0.在恢复时,当lastUpdateTime
等于或小于0时,lastUpdateTime
将设置为当前时间。下一次更新将根据currentTime和lastUpdateTime
计算deltaTime。
// A BaseScene is a custom SKScene subclass that has controller support for tvOS.
class GameScene : BaseScene {
private var lastUpdateTime: NSTimeInterval = 0
override func update(currentTime: CFTimeInterval) {
if lastUpdateTime <= 0 {
lastUpdateTime = currentTime
} else {
let deltaTime = currentTime - lastUpdateTime
lastUpdateTime = currentTime
Game.sharedInstance.update(deltaTime)
}
}
// This method of BaseScene is called when a player presses pause
// on a controller (tvOS).
override func handlePausePress(forPlayer player: PlayerIndex) {
paused = true
lastUpdateTime = 0
}
}