小编Cam*_*ter的帖子

SKAction仅在睡眠后或在运行调试器时运行

我试图使用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)

sleep ios sprite-kit skaction swift

5
推荐指数
1
解决办法
213
查看次数

标签 统计

ios ×1

skaction ×1

sleep ×1

sprite-kit ×1

swift ×1