2017-01-16 22 views
0

Я работаю с Xcode 8 и Swift 3, пытаясь отобразить кнопку «Возобновить игру» на моей сцене после паузы в игре, но поскольку все останавливается, у меня есть не нашел способ правильно это сделать. Я следовал советам Mike на этой странице “Tap To Resume” Pause text SpriteKit, но это не помогло.Попытка отображения кнопки возобновления после приостановки игровой сцены на SpriteKit

Когда моя кнопка паузы сливают, она выполняет функцию паузы с помощью следующего кода:

func pauseGame() { 
    self.isPaused = true 
    self.physicsWorld.speed = 0 
    self.speed = 0.0 
    self.scene?.view?.isPaused = true 
} 

Это может показаться немного излишним, но это работает. Если удалить

self.scene?.view?.isPaused = true 

из моей функции паузы, я могу отобразить кран Возобновить кнопку, но я по-прежнему может взаимодействовать с некоторыми из SpriteKit узлов в сцене. Я работаю над космической стрелковой игрой, поэтому пользователь все еще может перемещать spceship и стрелять, чтобы стрелять, хотя пули не путешествуют, пока я не возобновляю сцену.

Я думал о добавлении логической «истины» к функции паузы и добавлении оператора IF в стрельбу и перемещение выше, но мне кажется, что это немного усложняет ситуацию.

Любые предложения о том, как я могу отображать кнопку «Возобновить» при приостановке сцены?

+0

Почему бы вам не просто показать кнопку возобновления в качестве первой строки функции паузы? –

+0

Я пробовал это, но все останавливается, пока не появится кнопка Resume. На самом деле, хотя и не показано выше. Код вызывает отображение кнопки перед функцией pauseGame. –

+1

Возможно, это то, что вы ищете http://stackoverflow.com/questions/25824984/how-to-pause-completely-a-game-spritekit-scenekit-swift – 0x141E

ответ

1

В моей следующей игре я уверен, что я дам внушения для Nik попробовать. Что касается моего вопроса выше, он работал с использованием кода, показанного ниже.Дополнительным кодом является также удаление кнопки паузы. Теперь, когда это работает, я могу добавить к обеим кнопкам действия fadeIn и fadeOut.

override func touchesEnded(_ touches: Set<UITouch>, with event: UIEvent?) { 
    for touch: AnyObject in touches { 

     let pointOfTouch = touch.location(in: self) 

     let nodeUserTapped = atPoint(pointOfTouch) 

     if nodeUserTapped.name == "PauseButton" { 
      if (self.isPaused == false) { 
       pauseGame() 
      } 
     } 

     if nodeUserTapped.name == "ResumeButton" { 
      if (self.isPaused == true) { 
       resumeGame() 
      } 

     } 
    } 
} 


// MARK: - pauseGame 
func pauseGame() { 
    self.isPaused = true 
    currentGameState = gameState.pauseGame 
    self.physicsWorld.speed = 0 
    self.speed = 0.0 
    if (backgroundMusicIsOn == true) { 
     backingAudio.stop() 
    } 
    if resumeButton.isHidden == true { 
     resumeButton.isHidden = false 
    } 
    if pauseButton.isHidden == false { 
     pauseButton.isHidden = true 
    } 
} 


// MARK: - resumeGame 
func resumeGame() { 
    self.isPaused = false 
    currentGameState = gameState.inGame 
    self.physicsWorld.speed = 1 
    self.speed = 1.0 
    if (backgroundMusicIsOn == true) { 
     backingAudio.play() 
    } 
    if resumeButton.isHidden == false { 
     resumeButton.isHidden = true 
    } 
    if pauseButton.isHidden == true { 
     pauseButton.isHidden = false 
    } 
} 
2

Вы не можете взаимодействовать с любыми узлами на вашей сцене, потому что вы полностью остановили его, что приостанавливает все его дети, что является всем на сцене. Чтобы этого избежать, приостановите только определенные SKNode s (слои).

Добавьте некоторые узлы к различным SKNode, поэтому вместо паузы всей сцены вы можете приостановить только слой (SKNode), который вы хотите приостановить (gameLayer). Это будет выглядеть примерно так:

Инициализировать Узлы

let gameLayer = SKNode() 
let pauseLayer = SKNode() 

Теперь, когда вы хотите добавить ребенок к сцене, а не добавить его в слой, который вы хотите быть частью :

Добавить дочерние узлы к основным слоям

gameLayer.addChild(gameSceneNode) 
pauseLayer.addChild(resumeButton) 

D on't забудьте добавить слои на сцену слишком

Добавьте слои сцены

addChild(gameLayer) 
addChild(pauseLayer) 

Чтобы приостановить слой записи следующим образом:

gameLayer.isPaused = true 

Обратите внимание, что в этом примере , все узлы на gameLayer будут приостановлены, однако все, что находится на pauseLayer, не будет.

Ваш полный пример может выглядеть примерно так:

func pauseGame() { 

    gameLayer.isPaused = true 
    pauseLayer.isHidden = false 
    gameLayer.physicsWorld.speed = 0 
    gameLayer.speed = 0.0 

} 

func unpauseGame() { 

    gameLayer.isPaused = false 
    pauseLayer.isHidden = true 
    // Whatever else you need to undo 

} 

 Смежные вопросы

  • Нет связанных вопросов^_^