2016-04-04 3 views
0

Я пытаюсь сделать кнопку паузы и кнопку воспроизведения для своей игры, но я не знаю, что произойдет, когда экран просто зависает, когда я касаюсь кнопки паузы (появляется кнопка воспроизведения и удаление паузы), а затем нажмите кнопку воспроизведения (заморозить).Pause/Play freezing game

override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) { 

    //Pause 
    pauseButton = SKSpriteNode (imageNamed: "pause") 
    pauseButton.position = CGPoint(x: self.frame.width/2, y: self.frame.height/2) 

    self.addChild(pauseButton) 

    //Play 
    playButton = SKSpriteNode (imageNamed: "play") 
    playButton.position = CGPoint(x: self.frame.width/2, y: self.frame.height/2) 


    //when touch buttons 
    let touch = touches.first! 
    if pauseButton.containsPoint(touch.locationInNode(self)) { 
     addChild(playButton) 
     pauseButton.removeFromParent() 
    } 
    if playButton.containsPoint(touch.locationInNode(self)) { 
     addChild(pauseButton) 
     playButton.removeFromParent() 
    } 
} 

ответ

2

Нет смысла создавать кнопку при касании экрана. Это означает, что вы создаете новую кнопку каждый раз, когда вы касаетесь экрана. Переместить все выше код «// при нажатии кнопки сенсорной» из метода касаний и поместить его в didMoveToView

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

class GameScene: SKScene { 

     var pauseButton: SKSpriteNode! // to make your code even safer you could use optionals here 
     var playButton: SKSpriteNode! // to make your code even safer you could use optionals here 

     override func didMoveToView(view: SKView) { 
     //Pause 
     pauseButton = SKSpriteNode (imageNamed: "pause") 
     pauseButton.position = CGPoint(x: self.frame.width/2, y: self.frame.height/2) 

     self.addChild(pauseButton) 

     //Play 
     playButton = SKSpriteNode (imageNamed: "play") 
     playButton.position = CGPoint(x: self.frame.width/2, y: self.frame.height/2) 
    } 

    override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) { 
      for touch in touches { 

       let location = touch.locationInNode(self) 
       let node = nodeAtPoint(location) 

       //when touch buttons 
       if node == pauseButton { 
        addChild(playButton) 
        pauseButton.removeFromParent() 
       } 

       if node == playButton { 
        addChild(pauseButton) 
        playButton.removeFromParent() 
       } 
      } 
     } 
} 

В качестве альтернативы вы можете также добавить все кнопки на сцену и, чем, например, скрыть pauseButton. Чем вместо удаления и добавления кнопок вы просто скрыть и отобразить их

pauseButton.hidden = true 

Это работает только правильно, если ваша цель ИОС 9 или выше, где скрытые узлы больше не получают события прикосновения.

Надеюсь, это поможет

+0

Извините! Я забыл использовать «let touch = touchhes.first!» После «// при нажатии кнопки». Я попытался переместить его в файл didMoveToView, но он дает мне эту ошибку: «Использование неразрешенных идентификаторов» касается «». Я новичок в кодировании, поэтому не знаю многого. = ( – Luiz

+0

Я обновил свой ответ – crashoverride777

+0

Спасибо! Это сработало !! =) – Luiz