提问人:quickj 提问时间:9/5/2023 最后编辑:quickj 更新时间:9/7/2023 访问量:43
是否可以在更新函数中调用运行 SKAction 方法?
is it okay to call a run SKAction method inside of the update function?
问:
我正在 SkspriteNode 上运行 SKAction.rotate(to:) 方法来为精灵的旋转制作动画。每当我需要它指向新位置时,它都可以调用它,但是它会以更理想的方式旋转,在更新函数中连续运行它。它似乎像这样运行良好,但我想避免我的程序可能招致的任何性能反弹。精灵是一个移动的物体,它不会一遍又一遍地重复相同的旋转。我不希望它立即旋转,而是具有平滑的旋转动画。我是否做出了一个可以接受的决定,要求它在更新函数内运行旋转操作?
let scout = SKSpriteNode()
func findAngle(touchPos: CGPoint) -> CGFloat {
let dy = touchPos.y - scout.position.y
let dx = touchPos.x - scout.position.x
let angle = atan2(dy, dx) - CGFloat(Double.pi / 2)
return angle
}
func rotateToAngle(touchPos: CGPoint) {
let speed = CGFloat(300)
let duration = 1.0
let rotateAction = SKAction.rotate(toAngle: findAngle(touchPos: touchPos), duration: duration, shortestUnitArc: true)
scout.run(rotateAction)
}
这是一个例子,我可以在内部调用 rotateToAngle 开始,但是我在更新中调用它会得到更好的最终结果。精灵在不断移动。但是,对于性能来说,每 1/60 秒重复运行一次这样的 SKAction 可以吗?
答:
2赞
Steve Ives
9/6/2023
#1
是的。
在内部(或从 中调用的函数)中没有固有问题。SKAction
update:()
update
您能否扩展您的问题以包含显示问题的代码?
此外,这是在模拟器中(性能可以可变)还是在实际设备上?
评论
0赞
quickj
9/7/2023
我更新了问题以包含我所指的代码。澄清一下,这与其说是一个问题,不如说是一个关于这是否会对性能产生影响的担忧。我正在模拟器上运行。
0赞
Steve Ives
9/7/2023
@quickj 避免过早优化 - 不要在性能问题发生之前尝试修复它们,除非在编写代码时很明显有更好的方法。在 update(:) 中使用 SKAction 绝对是标准做法。此外,如果您的代码在模拟器中运行不佳,请在实际设备上尝试该代码,以缩小问题所在。
评论