2015-10-24 16 views
5

Tamam, burada Swift'de bir sprite kit oyunum var ve oyun bittikten sonra GameScene'i yeniden başlatırken sorun yaşıyorum.Swift, spritekit: Oyun bittikten sonra GameScene nasıl yeniden başlatılır? Gecikmeyi bırak

Şu anda, kullanıcı tüm yaşamını kaybettiğinde, gameIsOver değişken true olarak ayarlanmıştır; bu, sahne içindeki belirli düğümleri duraklatmanın yanı sıra bir zamanlayıcıyı da kapatır. Bu zamanlayıcı bittikten sonra Game Over sahnesine geçiyorum. Game Over sahnesinde, kullanıcı eve dönebilir veya oyunu yeniden başlatabilir. Benim burada sahneyi duraklatmak benim uygulama çöker ben yapmazsam GameScene tekrar yüklendiğinde, gameIsOver hala true ayarlandığında, çünkü olup

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 
     } 

: Burada

Ben mahallini oyunumu geçiş nasıl . Bu neden gameIsOver değerini false olarak ayarlamayı düşündüğümü bilmiyorum.

GameScene oyunumdan oyun sahnesine ve GameScene'e veya GameScene'den ev görünüm denetleyicisine ve GameScene'e birkaç kez taşındıktan sonra, fps sayım o kadar azaldı ki, tüm oyun noktaya düşüyor Oyun oynanması imkansızdır.

Bu, oyunumu sahneyi her açtığımda GameScene'i düzgün bir şekilde kaldırmadığım/imha etmediğime inanmamı sağlıyor.
Burada aynı problemi yaşadığımı düşünüyorum: In Swift on "game over" move from scene to another UIView and dispose the scene?, ancak bunun için yeni ve sorunlarını nasıl çözdüklerini anlayamıyorum.

GameScene'i geciktirmeyi durdurmak için Game Over sahneyi her sunuşumda nasıl sıfırlayabilirim/silebilirim?

cevap

5

Oyununuz Yapmadığınız bir yapı olmadıkça oyunlarınız arasında geçiş yaparken oyunOs Bover bir değeri tutmayacaktır. şeyler bir işlev oluşturmak geri GameScene geçiş gelince

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 

diyoruz gerçekleşmesi gibi değerini değiştirmek Yani yerine

var gameIsOver = false 

arasında o kadar

struct game { 
    static var IsOver : Bool = false 
} 

olmalıdır

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) 
    } 

, daha sonra GameScene'a sıfırlamak istediğinizde,

goToGameScene() 
+1

oh, bunu yapmakta yanlış bir şey yok mu? aynı sahneyi tekrar tekrar çağırıyor musunuz? vay. Oyun motoru için biraz "ağır" olacağını düşündüm. – msqar

+1

Hayır, yeni bir sahne oluşturacak ve eski sahneyi bekletmeyecek. Bir navigasyon kontrol cihazı kullanıyor ve segues kullanıyor olsaydınız farklı olurdu. Size yardımcı olması durumunda cevabı doğru olarak işaretlediğinizden emin olun. –

+0

post sahibi :(maalesef sana işareti veremem ama sen bana bu kadar oy vermiş olsaydın bana bu kadar oy verdim: – msqar