Приостановка моей игры не работает в Swift SpriteKit

Следил за несколькими другими сообщениями, такими как этот, но для по какой-то причине не работают должным образом для моего случая.

Может ли кто-нибудь объяснить мне, почему или что я делаю неправильно?

Итак, на данный момент у меня есть SKLabelNode, который прикреплен к фрейму в самом начале моей игры, но с альфа = 0. Это только говорит «ПАУЗА». Идея состоит в том, чтобы показать это, установив альфа = 1 при нажатии кнопки паузы и альфа = 0 при повторном нажатии, и все вернется в норму. Я подумал, что это будет лучше, чем удалять и снова прикреплять один и тот же спрайт/метку снова и снова. (Если нет, дайте мне знать)

Вот мой код:

func showPauseModal() {
        print("opening pause modal ", self.view!.paused)

        if self.view!.paused {
            self.pausedLabel.alpha = 0
            self.unpauseGame()
        }else{
            self.pausedLabel.alpha = 1
            self.pauseGame()
        }
    }

И затем это функции pauseGame() и unpauseGame().

    func pauseGame() {
        let delay = SKAction.waitForDuration(0.5)
        let block = SKAction.runBlock({
            self.view!.paused = true
        })
        let sequence = SKAction.sequence([delay, block])

        self.runAction(sequence)
    }

    func unpauseGame() {
        let delay = SKAction.waitForDuration(0.5)
        let block = SKAction.runBlock({
            self.view!.paused = false
        })
        let sequence = SKAction.sequence([delay, block])

        self.runAction(sequence)
    }

Итак, когда я впервые нажимаю кнопку паузы на экране, он приостанавливается и добавляет метку PAUSED. Когда я нажимаю ее снова, пауза никогда не исчезает, как и метка, хотя я проверяю, что она попадает внутрь функции unpauseGame. Так что же не так?

Заранее спасибо.


person msqar    schedule 01.07.2016    source источник


Ответы (1)


Я не думаю, что runAction будет выполняться, пока игра стоит на паузе. Попробуйте просто

func unpauseGame() {
    self.view!.paused = false
}
person Mr Flynn    schedule 01.07.2016
comment
О, ты был прав! Спасибо. Я поставлю вас как решателя. Но у меня появилось другое сомнение. У меня в игре есть несколько физических тел, если я снимаю игру с паузы непосредственно перед паузой, очень быстро, всякий раз, когда я возвращаюсь в игру, все тела оказываются в земле, а не остаются там, где они были до паузы. Теперь, если я подожду, например, 5 секунд, они останутся на том же месте, знаете почему? - person msqar; 01.07.2016
comment
Приостановка представления не приостанавливает физику. Вы можете приостановить физику с помощью scene.physicsWorld.speed = 0 - person Mr Flynn; 01.07.2016
comment
И когда я сниму паузу в игре, все вернется на круги своя? или мне нужно снова установить скорость? - person msqar; 01.07.2016
comment
вы должны снова установить скорость на 1 - person Mr Flynn; 01.07.2016
comment
Мммм нет, все еще происходит. Это делается, если self.view!.paused { self.pausedLabel.alpha = 0 self.pausedModalBackDrop.alpha = 0 self.physicsWorld.speed = 1 self.unpauseGame() }else{ self.pausedLabel.alpha = 1 self.pausedModalBackDrop. альфа = 0,5 self.physicsWorld.speed = 0 self.pauseGame() } - person msqar; 01.07.2016
comment
Хм, я пользуюсь документацией Apple по адресу apple попробуйте изменить скорость физического мира независимо от вашего механизма паузы, чтобы убедиться, что ваш self.physicsworld работает правильно - person Mr Flynn; 01.07.2016
comment
Да верно, говорит. Но, возможно, это вызвано чем-то другим... я не могу понять, почему, если это моя игра или что-то еще. Я имею в виду, почему если я жду больше 3-х секунд, то все нормально, а раньше лагает и тел опускается на пол. Я буду продолжать проводить дополнительные исследования: D, спасибо - person msqar; 01.07.2016
comment
Давайте продолжим обсуждение в чате. - person Mr Flynn; 01.07.2016