我正在用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