我正在使用 spriteKit 和 Swift 玩 iOS 游戏,但在更新角色位置时遇到问题。我的计划是在屏幕顶部有一个简单的 (x,y) 坐标来显示玩家的位置,并每秒更新几次。我能够使用以下代码实现这一点:
updatePostimer = NSTimer.scheduledTimerWithTimeInterval(0.10, target: self, selector: Selector("updatePosition"), userInfo: nil, repeats: true)
这样做的问题是,每次执行该方法时,屏幕上都会出现明显的滞后。 updatePosition方法如下:
func updatePosition(){
positionLabel?.text = "X: " + String(Int(scene.player.position.x)) + " Y: " + String(Int(scene.player.position.y))
}
我不明白为什么这会滞后。我会将必要的代码放入 GameScene 更新方法中,但由于这不是游戏的关键部分,因此我尝试在不同线程中的计时器上运行此方法。如果有人对如何在不同线程(主线程除外)上有效运行此方法,或者如何让它在没有帧延迟的情况下每秒执行几次有任何建议,我肯定会很感激:)
最佳答案
您应该利用 SpriteKit 的运行循环。 SpriteKit 将调用:
func update(currentTime: NSTimeInterval)
在每次渲染过程之前,您可以根据需要更新任何游戏状态。欲了解更多信息,请参阅SKScene Class Reference 。不建议使用 NSTimer,因为计时器的触发不均匀(即每当系统发现方便时)。对于游戏状态更改,您希望此类更改与渲染引擎同步。有关 Sprite 套件运行循环的讨论,请参阅 here以及为什么 NSTimer 不适合动画,请参阅 here .
关于ios - 如何在 Swift 中每 X 秒高效地调用一个函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33856531/