如何获得更新(currentTime :)函数使用的相同时间?(在被召唤之前)

Maz*_*zen 6 objective-c ios scenekit sprite-kit swift

问题:update(currentTime:)函数in SKScene用带currentTime参数的每一帧调用.我想知道如何在update(currentTime:)不使用该update功能的情况下从同一来源获取时间.我发现CFAbsoluteTimeGetCurrent()哪个不同.

原因:要计算timeSinceLastUpdate你需要一个名为的实例变量timeOfLastUpdate.要实现,timeOfLastUpdate您需要在第一次更新之前将其设置为任意值,这使得第一次计算timeSinceLastUpdate不正确.您可以使用简单的if语句来检测它或使用选项,但这是一个不需要的分支,如果我只是设置timeOfLastUpdate,可以避免didMoveToView(view:).这就是我想要做的.

ric*_*ter 4

第一个timeSinceLastUpdate总是与其他的不同。通常,存储前一update调用的绝对时间并从当前调用的时间中减去它以获得timeSinceLastUpdate. 如果前一个时间不存在,因为您第一次通过渲染循环 \xe2\x80\x94 ,它被设置为零或无穷大或负数或您将其初始化为的任何哨兵值,只需设置您的timeSinceLastUpdate某个名义值入门价值。像你的帧间隔(如果你要 60 fps 则为 16.67 毫秒)之类的东西是有意义的 \xe2\x80\x94 你不希望依赖于该时间间隔的游戏代码做一些疯狂的事情,因为你传递了零或一些价值巨大。

\n\n

事实上,timeSinceLastUpdate如果你的用户暂停并恢复了游戏,那么当它变得 foo large \xe2\x80\x94 时,有逻辑将你的正常化为正常的东西并不是一个坏主意。如果您有游戏实体(例如 GameplayKit 代理),其运动遵循某种形式position += velocity * timeSinceLastUpdate模型,那么当您从暂停恢复时,您希望它们移动一帧的时间,而不是采用五分钟的暂停时间乘以速度并跳转到超空间。

\n\n

如果将之前的时间初始化为零,减去并标准化为预期的帧间隔,则将使用相同的代码涵盖开始和取消暂停的情况。

\n