2017-10-04 24 views
1

그래서 저는 SpriteKit에있는 게임을 사용하고 있으며이 코드를 사용하여 게임을 일시 중지하고 있습니다.? skennis가 작동하지 않으면 .ispaused = true가됩니다.

self.pauseButton.alpha = 0 
self.playButton.alpha = 1 
self.settingsBackground.alpha = 0.85  
self.isPaused = true  
self.pauseButton.alpha = 1 
self.playButton.alpha = 0 
self.settingsBackground.alpha = 0 

일시 중지하기 전에 실행되는 코드는 일시 중지의 모양을 변경하는 것이며 이후에 코드가 되돌립니다. 문제는 일시 중지되기 전의 코드가 실행되지 않고 주변의 시각을 변경하기 전에 게임이 일시 중지된다는 것입니다. 지연을 추가하고, 단계를 SKActions으로 만들고, 일시 중지하기 전에 코드를 테스트 해 보았습니다. 처음 세 줄만 실행하면 영상이 제대로 바뀌지 만 분명히 게임이 멈추지 않습니다. 모든 것을 실행하면 게임이 일시 중지되지만 영상은 변경되지 않습니다. 도움!

답변

1

문제는 장면이 일시 중지 된 경우에도 코드가 계속 실행된다는 것입니다. 예, 장면을 일시 정지하고 있습니다. 예를 들어 비주얼이 실행됩니다 ...하지만 isPaused 라인 이후의 비주얼도 실행되고 방금 변경된 비주얼을 재설정합니다.

여기는 어떻게 작동하는지에 대한 간단한 예입니다. 장면에 3 개의 상자가 있습니다. 아래쪽 상자에는 반복적으로 위아래로 크기가 조정되는 동작이 있으며 장면이 일시 중지되면 중지됩니다. 맨 위 상자는 눌렀을 때 게임을 일시 중지하고 게임을 일시 중지하지 않을 중간 상자를 나타냅니다.

class GameScene: SKScene { 

    private var test: SKSpriteNode! 
    private var test2: SKSpriteNode! 
    private var test3: SKSpriteNode! 

    override func didMove(to view: SKView) { 

     backgroundColor = .clear 

     test = SKSpriteNode(color: .blue, size: CGSize(width: 200, height: 200)) 
     test.position = CGPoint(x: 0, y: 350) 
     addChild(test) 

     test2 = SKSpriteNode(color: .red, size: CGSize(width: 200, height: 200)) 
     test2.position = CGPoint(x: 0, y: 0) 
     test2.alpha = 0 
     addChild(test2) 

     test3 = SKSpriteNode(color: .yellow, size: CGSize(width: 200, height: 200)) 
     test3.position = CGPoint(x: 0, y: -350) 
     addChild(test3) 

     let scaleDown = SKAction.scale(to: 0.1, duration: 1.0) 
     let scaleUp = SKAction.scale(to: 1.0, duration: 1.0) 
     let sequence = SKAction.sequence([scaleDown, scaleUp]) 
     let repeater = SKAction.repeatForever(sequence) 
     test3.run(repeater) 
    } 

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

     if let touch = touches.first as UITouch! { 

      let touchLocation = touch.location(in: self) 

      if test.contains(touchLocation) { 
       print("pausing") 
       self.test2.alpha = 1 
       self.test.alpha = 0 
       self.isPaused = true 
      } 

      if test2.contains(touchLocation) { 
       print("unpausing") 
       self.test2.alpha = 0 
       self.test.alpha = 1 
       self.isPaused = false 
      } 
     } 
    } 
} 
+0

완벽합니다. 감사. 나는 행동과 그래픽이 모두 멈추었 기 때문에 그 일이 일어나고 있다고 생각하지 않았습니다. 되돌릴 코드를 isPaused = false와 같은 위치에 두어 문제를 해결할 것입니다. –

+0

완벽 함, 기쁜 마음으로 알아낼 수있었습니다. –