2015-10-24 2 views
5

Хорошо, поэтому у меня есть комплект для спрайтов в Swift, и у меня возникли проблемы с перезагрузкой моей GameScene после ее окончания игры.Swift, spritekit: Как перезапустить GameScene после игры? Остановить отставание?

Прямо сейчас, когда пользователь теряет всю свою жизнь, переменная gameIsOver установлена ​​в true, которая приостанавливает определенные узлы внутри сцены, а также устанавливает таймер. По окончании этого таймера я перехожу на сцену с игрой. Из сцены Game Over пользователь может либо вернуться на родину, либо перезапустить игру.

Вот как я перейти к моей игре над сценой:

countdown(circle, steps: 120, duration: 5) { 

       //Performed when timer ends 
       self.gameSoundTrack.stop() 

       let mainStoryboard = UIStoryboard(name: "Main", bundle: nil) 
       let vc = mainStoryboard.instantiateViewControllerWithIdentifier("GOViewController") 
       self.viewController!.presentViewController(vc, animated: true, completion: nil) 

       //Resetting GameScene 
       self.removeAllChildren() 
       self.removeAllActions() 
       self.scene?.removeFromParent() 
      self.paused = true 
      gameIsOver = false 
     } 

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

После переезда из GameScene в мою игру по сцене и обратно в GameScene или из GameScene на мой домашний контроллер просмотра и обратно в GameScene пару раз мой счет в fps уменьшился настолько, что вся игра отстает от точки где геймплей невозможен.

Это приводит меня к мысли, что я не удаляю/распоряжаюсь GameScene должным образом каждый раз, когда я представляю свою игру по сцене.
Я считаю, что у меня такая же проблема, как здесь: In Swift on "game over" move from scene to another UIView and dispose the scene?, но я новичок в этом, и я не могу понять, как они решили свою проблему.

Как я могу полностью сбросить/удалить GameScene каждый раз, когда представляю свою игру поверх сцены, чтобы остановить отставание?

ответ

5

Ваш gameIsOver Bool не будет сохранять значение при переключении между сценами, если вы не сделаете его структурой. Таким образом, вместо

var gameIsOver = false 

должно быть

struct game { 
    static var IsOver : Bool = false 
} 

поэтому при изменении значения, как вещи вы звоните

game.IsOver = true 
//if your calling it in a different View controller or scene than where you created it just put the name before it like so 
GameViewController.game.IsOver = true 

Что касается перехода обратно в GameScene создать функцию

func goToGameScene(){ 
    let gameScene:GameScene = GameScene(size: self.view!.bounds.size) // create your new scene 
    let transition = SKTransition.fadeWithDuration(1.0) // create type of transition (you can check in documentation for more transtions) 
    gameScene.scaleMode = SKSceneScaleMode.Fill 
    self.view!.presentScene(gameScene, transition: transition) 
    } 

, то всякий раз, когда вы хотите сбросить настройки в GameScene, просто позвоните

goToGameScene() 
+1

О, так что нет ничего плохого в этом? повторное вызов одной и той же сцены снова и снова? Вау. Я думал, что это будет «тяжело» для игрового движка. – msqar

+1

Нет, это создаст новую сцену, и она не останется в старой сцене. Если бы вы использовали навигационный контроллер и использовали segues, это было бы иначе. Обязательно отметьте ответ как правильный, если он поможет вам. –

+0

im not the post owner :(К сожалению, я не могу дать вам знак. Но вы помогли мне с этим, так что тот, кто дал вам досрочное голосование. – msqar

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