2014-09-13 13 views
5

udało mi się wstrzymać grę sceny z tym kodem:Jak całkowicie wstrzymać grę? SpriteKit/SceneKit [SWIFT]

override func touchesBegan(touches: NSSet!, withEvent event: UIEvent!) 
{ 
    var touch:UITouch = touches.anyObject() as UITouch 


    pauseText.text = "Continuer" 
    pauseText.fontSize = 50 
    pauseText.position = CGPointMake(self.frame.size.width/2, self.frame.size.height/2) 


    /* bouton play/pause */ 


    var locationPause: CGPoint = touch.locationInNode(self) 
    if self.nodeAtPoint(locationPause) == self.pause 
    { 
     println("pause") 
     addChild(pauseText) 
     pause.removeFromParent() 
     paused = true 


    } 
    if self.nodeAtPoint(locationPause) == self.pauseText 
    { 
     pauseText.removeFromParent() 
     paused = false 
     addChild(pause) 
    } 
} 

Ale mam problem. Wszystkie losowe interwały podczas gry tworzą obiekty i wyświetlają je na ekranie. Kiedy wstrzymuję grę, kontynuuję tworzenie obiektów w tle i kiedy wznawiam grę wszystkie obiekty utworzone podczas pauzy pojawiają się w tym samym czasie na ekranie.

Jak mogę to naprawić?

+1

Ustaw scene.view.paused = true lub false, aby wstrzymać/wznowić grę. – 0x141E

+0

Dziękujemy! Działa, ale etykieta pauseText nie pojawia się. Jak mogę zrobić? – Haox

Odpowiedz

8

Nie możesz dodać SKLabelNode (lub czegokolwiek innego) do swojej sceny, gdy SKView jest w trybie pauzy. Musisz powrócić do pętli uruchamiania, aby tekst został dodany przed zatrzymaniem gry. Oto jeden sposób, aby to zrobić:

// Add pause text or button to scene 
addChild(pauseText) 
let pauseAction = SKAction.run { 
    self.view?.isPaused = true 
} 
self.run(pauseAction) 
+0

Działa doskonale !! Dziękuję Ci bardzo !! Zastanowiłem się nad tymi regułami (dodaj etykietę przed zatrzymaniem), dlatego piszę kod tekstu przed kodem, aby wstrzymać grę. Ale nie sądziłem, że trzeba wykonać inną funkcję. Możesz mi wytłumaczyć? – Haox

+2

Dodawanie węzła potomnego do sceny nie jest wykonywane natychmiast. Jest on dodawany po powrocie z touchesBegan. Instrukcja scene.view.paused jest wykonywana natychmiast (lub ma wyższy priorytet), więc jest wykonywana, zanim twój SKLabelNode zostanie dodany do sceny. – 0x141E

Powiązane problemy