我有一堆对象 (SKNode
) 从屏幕顶部开始,通过 SKAction.move(to:duration:)
和node.run(moveAction)
。此外,我在屏幕中央有一个节点,它有自己的物理体,可以通过触摸输入左右拖动。我可以很好地检测到碰撞,但我想知道是否存在在中心节点与任何对象接触时“暂停”所有对象的范例。此外,我希望能够在其他对象“暂停”时移动中心节点,这样我就可以将它移开,然后让对象恢复它们的运动。我想我可能会遍历所有现有对象并设置它们的 isPaused
属性,但我不确定应用程序如何知道中心节点何时不再“碰撞”以便我可以切换该属性.
最佳答案
要暂停,您必须检测 didBegin()
中的联系,用应该暂停的节点填充一些数组,最后暂停节点。例如,实际暂停可以在 didSimulatePhysics()
中完成。暂停您可以使用的所有节点
self.enumerateChildNodesWithName("aName") {
node, stop in
// do something with node or stop
}
或使用 children节点的属性并循环遍历它(例如循环遍历应该暂停的节点的容器)。
您还可以暂停某些操作:
if let action = square.actionForKey("aKey") {
action.speed = 0
}
并使用 action.speed = 1
取消暂停,或者使用 action.speed = 0.5
使其慢动作
为了减慢物理模拟,有一个名为 physicsWorld.speed
的属性(确定模拟运行的速率)。
关于swift - SpriteKit中如何控制节点的速度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45573029/