Создать меню паузы в Spritekit - PullRequest
0 голосов
/ 08 мая 2018

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

override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
    for touch in touches {
        let location = touch.location(in: self)

        if atPoint(location).name == "pause" {
            let button: SKSpriteNode?
            let button2: SKSpriteNode?

            button = SKSpriteNode(imageNamed: "button_continue")
            button?.name = "button_continue"
            button?.size.height = 55
            button?.size.width = 215
            button?.physicsBody = SKPhysicsBody(rectangleOf: button!.size)
            button?.physicsBody?.allowsRotation = false
            button?.position = CGPoint(x: 0, y: 160)
            button?.zPosition = 100
            self.addChild(button!)

            button2 = SKSpriteNode(imageNamed: "button_finish")
            button2?.name = "button_finish"
            button2?.size.height = 55
            button2?.size.width = 215
            button2?.physicsBody = SKPhysicsBody(rectangleOf: button2!.size)
            button2?.physicsBody?.allowsRotation = false
            button2?.position = CGPoint(x: 0, y: -50)
            button2?.zPosition = 100
            self.addChild(button2!)

            // The two buttons are created but here I am trying to stop everything until the continue button is pressed and I don't find a way
        } 
    }
}

Я пробовал sleep () или timer.invalidate (), но ни один из них не работает с операторами if, и я не могу использовать циклы while, потому что тогда кнопки не появляются, пока цикл while не завершится:

while atPoint(location).name != "button_cotinue" {
    timer1.invalidate()
}

Это то, что я пытался и не работает.

Затем, когда нажата кнопка продолжения, я также удалю кнопки, но могу правильно их кодировать. Также кнопка «Готово» отправляет игрока в главное меню.

1 Ответ

0 голосов
/ 08 мая 2018

Я помещаю элементы управления (кнопки) в слой с именем controlsLayer, который отделен от всех элементов игрового процесса, таких как игрок, враги и препятствия. Затем я помещаю все игровые предметы, которые я хочу приостановить, в слой с именем gameLayer. Я делаю controlsLayer иметь высокий zPosition, как 100.

затем, когда я нажимаю кнопку паузы, я звоню gameLayer.isPaused = true, а когда я нажимаю продолжить, я звоню наоборот. gameLayer.isPaused = false. просто приостановив gameLayer, вы все равно можете запускать другие действия, такие как переходы или эффекты, на ваши кнопки паузы. Если вы приостановите всю сцену, вы не сможете запускать какие-либо действия или эффекты для каких-либо предметов.

...