Spritekit:暂停父节点不会暂停子节点



我正在用SpriteKit创建我的第一个游戏。我正在尝试暂停我的游戏场景,然后通过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
}

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

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

self.isPaused = true

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

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

self.physicsWorld.speed = 0

最新更新