2017-12-31 92 views
1

SpriteKit 사용 플레이어가 게임을 다시 시작할 때 화면에서 움직이는 (움직이는) 일시 중지 메뉴를 만들려고합니다.SKAction은 절전 모드 또는 디버거를 실행하는 동안 만 실행됩니다.

weak var pauseScroll: SKSpriteNode? 

override init(size: CGSize) { 
    ... 
    let pauseScene = SKScene(fileNamed: "PauseMenu")! 
    pauseScroll = pauseScene.childNode(withName: "PauseScroll") as? 
    SKSpriteNode 
    pauseScroll?.position = CGPoint(x: 0, y: 495) 
    pauseScroll?.zPosition = 1000 
    pauseScroll?.move(toParent: self) 
} 

는 내가 여기서 뭘하고있어의 UI를 세우고있다 :

let duration = TimeInterval(0.5) 
let moveAction = SKAction.move(to: CGPoint(x: 0, y: 495) , duration: 
duration) 
pauseScroll?.run(moveAction) 

pauseScroll은 다음과 같이 초기화된다과 같이

내가 SKAction를 작성하고 터치 내에서 실행이 시작 이 모든 것이 실행되는 실제 GameScene과 같은 다른 spritekit.scene 파일의 pauseScroll은 모두 코드에서 수행됩니다. 그런 다음이를 가져 와서 .move (toParent : self)를 호출하여 GameScene에 추가합니다.

일은 pauseScroll을 참조 할 수 있습니다. 예를 들어 수정할 수 있습니다. 그 위치를 바꾸고, 물리 구조와 충돌 마스크를주고, pauseScroll에 포함 된 노드에 탭을 등록합니다. 겉보기에는 모든 것이지만 SKActions를 실행합니다.

나는 동시에 다른 SKSpriteNodes에 대한 SKActions을 실행하고있어 그들은이 모든 .init 예를 들어, 내 코드에서 설정되어 그들이 다르게 초기화하는 물론, 잘 작동됩니다

var background: SKSpriteNode! 

override init(size: CGSize) { 
    ... 
    background = SKSpriteNode(imageNamed: "GameBackground") 
    background.size = size 
    addChild(background) 
} 

I 다음 그들에게 내가 접촉에서 다른 작업을 수행 같은 방식으로 애니메이션을하기 시작했다 :

let colorAction = SKAction.colorize(withColorBlendFactor: 0.4, 
duration: duration) 
background?.run(colorAction) 

흥미롭게도, 내가 잠을 실행하는 경우 (1) 다른 곳 SKAction가 pauseScroll에서 실행되는 함수에; 스크롤은 애니메이션처럼 움직여 화면에서 벗어나게됩니다. 그러므로 그것은 경쟁 조건 인 것처럼 보입니다. 그러나 나는 그것이 기다리고있는 것에 관해서 가장 희미한 단서를 가지고 있지 않습니다.

pauseScroll 및 moveAction의 값을 인쇄 할 때 나는 잠자는 것과 같은 결과를 얻습니다 (1). 여기

행동의 버그 :

enter image description here

나는 잠을 추가하는 경우 (1) 스크롤 전원이 위로 이동하기 전에 그 같은 일이 1 초 동안 전체 응용 프로그램 대기를 제외하고 발생 어디서나 터치 내에는 시작에 화면의 맨 위를 의미합니다.

필요한 경우 더 많은 코드를 제공해 드리겠습니다.

+0

sleep()을 사용하기 전에 어떤 기능을 사용하는지 확인해보십시오. SpriteKit에서 수면을 사용하지 않는 이유는 정확히 무엇을 얻으 려하는지 알지 못한다는 것입니다. –

+0

waitAction = SKAction.wait 보자 할 completionAction = SKAction.run { } –

+0

에게 호출 self.run을 (forDuration 기간) (waitAction, 완료 : {? self.pauseScroll .RUN (하게 MoveAction) 은})하지 않습니다 sleep (1)과 같은 효과가 있습니다. moveAction이 잠자다가 기다리지 만, 수면과 달리 스크롤은 제 위치에 있습니다. –

답변

1

.move(toParent: self)을 사용하여 새 부모로 자식을 이동할 때 isPaused을 각 자식에 대해 false로 설정해보십시오. 나는 장면에서 장면을로드 할 때 모든 자식이 일시 중지되었다고 생각하며 SpriteKit은 장면이 처음 나타날 때 자동으로 isPaused를 false로 설정합니다.

tempScene.children.forEach() { child in 
      child.isPaused = false 
      child.move(toParent: newParentNode) 
} 
+0

그게 효과가! 정말 고맙습니다. –