我有一个游戏,我使用很多SKActions来提供所需的游戏逻辑。
例如,我不是将精灵的zRotation
设置为值,而是使用runAction(SKAction.rotateTo(/* angle here */, duration: 0.0)
代替。
我在update
和touchesMoved
中拨打了这样的电话。因此,这可能意味着数百个这样的调用,有时嵌套在一组其他操作中。
相对于直接设置zRotation
属性,我是否会产生大量开销?
答案 0 :(得分:2)
您不应该在更新方法中调用SKAction,因为它每秒调用60次。相反,使用基于事件的触发器,该触发器又调用SKAction。 touchesMoved就是一个很好的例子。您还可以使用完成方法块在完成当前操作后发出新的SKAction信号。
答案 1 :(得分:2)
切勿将SKActions用于实时动作。相反,您应该直接设置zRotation或者每帧设置必要的角速度。在您的情况下,更新方法和touchesMoved方法都不适用于SKActions,因为它们可以每秒运行30-60次。
SKActions会产生很大的开销。以下是Apple的文档引用:
何时不应使用行动
虽然行动是有效的,但那里 是创建和执行它们的成本。如果您要进行更改 每个动画帧中的节点属性以及所需的更改 要在每个帧中重新计算,最好进行更改 直接到节点而不是使用动作来执行此操作。更多 有关您在游戏中可能执行此操作的信息,请参阅高级 场景处理。
您可以在我的回答here
中看到使用实时动作而不是SKActions的示例