暂停currentTime of - (void)update:(CFTimeInterval)currentTime

时间:2014-03-15 14:23:17

标签: objective-c sprite-kit

我想知道是否可以暂停currentTime in - (void)更新:(CFTimeInterval)currentTime

我成功暂停了我的场景:

self.view.paused=YES;
self.paused=YES;
self.scene.view.paused = YES;

它有效但在 - (void)更新我有这个方法:

[_landscape update:currentTime];

问题是即使场景暂停,currentTime也不会停止增加。 在我恢复场景后,我的_landscape速度发生了变化。

2 个答案:

答案 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            
    }        
}