2017-12-31 45 views
1

SpriteKitの使用プレイヤーがゲームを再開すると、画面からアニメーション(移動)する一時停止メニューを作成しようとしています。のUIをレイアウトされて私はここでやっている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) 
} 

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)。

ここでアクションのバグだ:私はどこでもタッチ以内スクロールがオフの上に移動する前に、同じことが1秒間全アプリのを待つ以外起き、その後始めに(1)睡眠を追加する場合

enter image description here

画面の上部に表示されます。

必要に応じてさらにコードを提供しています。

+0

sleep()を使用する前に、その動作を確認してください。 SpriteKitであなたが得るべきものを正確に知っていない限り、あなたはsleepを使用しません。 –

+0

waitAction = SKAction.wait(forDuration:持続時間)させ:しない({ self.pauseScroll .RUN(moveAction) ?} waitAction、完了) はcompletionAction = SKAction.run { } –

+0

呼び出しself.runせ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

それはうまくいった!どうもありがとうございます。 –

関連する問題