シーンが一時停止してもコードが実行されるという問題があります。はい、シーンを一時停止しています。はい、ビジュアルは実行されますが、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
}
}
}
}
これは理にかなっています。ありがとう。私は、アクションとグラフィックスがすべて一時停止していたので、それが起こっているとは思っていませんでした。私はisPaused = falseと同じ場所に復帰コードを置くことで修正すると思います。 –
完璧、あなたがそれを理解するのを助けてくれてうれしい –