2017-10-04 15 views
1

私はSpriteKitのゲームで作業しています。このコードを使用してゲームを一時停止しています。view?skapseed = true sksceneが動作しない

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を作成し、一時停止前にコードをテストしようとしました。最初の3行だけを実行すると、ビジュアルは正しく変更されますが、明らかにゲームは一時停止しません。私が全部を走らせると、ゲームは一時停止しますが、ビジュアルは変わりません。助けて!

答えて

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

完璧、あなたがそれを理解するのを助けてくれてうれしい –

関連する問題