Cam*_*ter 5 sleep ios sprite-kit skaction swift
我试图使用SpriteKit创建一个暂停菜单,以便在玩家继续游戏时在屏幕上进行动画处理(移动)。
我创建了一个SKAction并在开始运行时就这样运行它:
let duration = TimeInterval(0.5)
let moveAction = SKAction.move(to: CGPoint(x: 0, y: 495) , duration:
duration)
pauseScroll?.run(moveAction)
Run Code Online (Sandbox Code Playgroud)
pauseScroll初始化为:
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)
}
Run Code Online (Sandbox Code Playgroud)
我在这里要做的是将pauseScroll的UI放置在另一个spritekit.scene文件中,作为实际的GameScene,所有这些操作均在代码中完成。然后,我通过调用.move(toParent:self)将其添加到GameScene中。
事情是,我可以很好地引用pauseScroll,可以对其进行修改,例如更改其位置,为其指定物理身体和碰撞蒙版,在pauseScroll中包含的节点上注册水龙头等。看似一切都在其上运行了SKActions。
我同时为其他SKSpriteNode运行SKAction,它们运行良好,当然它们的初始化方式有所不同,因为它们都是在.init中的代码中设置的,例如:
var background: SKSpriteNode!
override init(size: CGSize) {
...
background = SKSpriteNode(imageNamed: "GameBackground")
background.size = size
addChild(background)
}
Run Code Online (Sandbox Code Playgroud)
然后,以与我在触摸中开始的其他任何操作相同的方式为它们设置动画:
let colorAction = SKAction.colorize(withColorBlendFactor: 0.4,
duration: duration)
background?.run(colorAction)
Run Code Online (Sandbox Code Playgroud)
有趣的是,如果我在sleepScroll上运行SKAction的函数中的其他任何地方运行sleep(1);然后滚动动画并根据需要向上移动到屏幕之外。因此,这似乎是一个比赛条件,但对于它正在等待什么,我没有最模糊的线索。
无论是否睡眠(1),在打印pauseScroll和moveAction的值时,我都会得到相同的结果。
这是运行中的错误:
如果我在触摸开始的任何地方添加了sleep(1),那么会发生同样的事情,除了整个应用程序等待1秒钟,然后滚动才按原计划移出屏幕顶部。
如有必要,我很乐意提供更多代码。
将孩子移动到新父母时,请.move(toParent: self)尝试将isPaused每个孩子的false 设置为false。我怀疑当您从场景中加载所有子级时它们都已暂停,并且也许SpriteKit会在场景首次出现时自动将isPaused设置为false。
tempScene.children.forEach() { child in
child.isPaused = false
child.move(toParent: newParentNode)
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
213 次 |
| 最近记录: |