【问题标题】:Spritekit: Pausing parent node does not pause child nodeSpritekit:暂停父节点不会暂停子节点
【发布时间】:2017-06-17 10:21:14
【问题描述】:

我正在用 SpriteKit 创建我的第一个游戏。我正在尝试暂停我的 GameScene,然后通过 SpriteKit 运行一些动画。问题是,如果我使用 self.view?.isPaused = true 暂停场景,一切都会停止。在四处搜索后,我发现这样做的方法是将另一个节点添加到场景中,并使您想要暂停的所有其他内容成为该节点的子节点。我正在尝试这样做,但没有成功。这是我的代码

var worldNode:SKNode?
override func didMove(to view: SKView) {
    worldNode = SKNode()
    self.addChild(self.worldNode!)

    let spriteNode:SKSpriteNode = SKSpriteNode(imageNamed: "red_ball")
    spriteNode.size = CGSize(width: 40, height: 40)
    spriteNode.physicsBody = SKPhysicsBody(circleOfRadius: 15)
    spriteNode.physicsBody?.isDynamic = true

    self.worldNode?.addChild(spriteNode)
    spriteNode.physicsBody?.applyImpulse(CGVector(dx: 10, dy: 10))


    self.worldNode?.isPaused = true
    //self.view?.isPaused = true
}

当我运行它时,我看到球在屏幕上移动,根据我的理解,这不应该发生,因为我正在暂停 worldNodespriteNode 是它的子节点。如果我使用self.view?.isPaused = true 暂停场景,那么球就像预期的那样静止。我错过了什么吗?如何将节点添加到worldNode,然后通过暂停worldNode 仅暂停这些节点。谢谢!

【问题讨论】:

  • 发布后我意识到即使直接使用 spriteNode.isPaused = true 暂停子节点,也不会暂停它,也许应用了 impluses 的节点不能以这种方式暂停?看来我需要找一个替代方案,也许改用 UI 动画,即使场景暂停,它也会继续工作

标签: ios swift sprite-kit swift3


【解决方案1】:

暂停由冲动和力移动的节点的一种方法当然是暂停场景:

self.isPaused = true

但我会说您希望其他节点不暂停(例如 HUD 元素),因此您将游戏元素添加到世界节点中。

因此,在暂停节点的同时暂停物理的一种方法是暂停整个物理世界,如下所示:

self.physicsWorld.speed = 0

【讨论】:

  • 请注意 isPaused 存在错误,由于某种原因,它也会翻转所有子级 isPaused 状态,这很糟糕。 (假设您在场景中有一个暂停的粒子发射器,如果您将场景设置为取消暂停,发射器将提前发射)
  • @Knight0fDragon 忘记了这个小事实,我记得有人提到过它,谢谢。就我个人而言,我根本不使用它来暂停场景,因为我喜欢拥有世界节点并暂停它。
  • 连世界节点都受其影响
  • @Knight0fDragon 当然可以,但是如果你不暂停场景,那就没有坏处。这就是我的意思...
  • 如果你暂停世界节点,并且世界节点上有一个发射器,同样的结果也会发生,哈哈
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多