문제는 장면이 일시 중지 된 경우에도 코드가 계속 실행된다는 것입니다. 예, 장면을 일시 정지하고 있습니다. 예를 들어 비주얼이 실행됩니다 ...하지만 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와 같은 위치에 두어 문제를 해결할 것입니다. –
완벽 함, 기쁜 마음으로 알아낼 수있었습니다. –