在不输入关于 ash 框架的具体考虑因素的情况下,有很多方法可以处理物理和图形引擎更新,这些方法不一定取决于您使用的框架。首先,除非您正在制作仅针对具有足够硬件要求的设备的 AIR 移动应用程序,否则您不能假设稳定的 60fps 帧率(或任何稳定的帧率)。这为您提供了多种选择:
使用固定的 delta t 更新物理引擎,在这种情况下,任何错过的帧都会减慢游戏物理速度。不是很好
测量最后一帧之间的实际增量 t 并相应地更新物理引擎以补偿前一帧的延迟。在大多数情况下这应该足够了
如果由于某种原因您的物理引擎需要固定增量(
例如updatePhysic(1/30);
,给出的结果
与始终是 1/60 实现的倍数,您应该累积其余部分以进行下一次更新)updatePhysic(1/60); updatePhysic(1/60);
updatePhysic(dT);
for(var i:int = 0; i< dT * 60; ++i) updatePhysic(1/60);
如果您需要最佳性能和多核 CPU 的最佳使用,您可以考虑在单独的工作人员中更新物理引擎,但 Flash 播放器支持、调试工具和工作人员之间的数据共享仍处于试验阶段!
无论如何,我看不出有什么意义
我想以 60 fps 更新我的渲染系统,但以固定的时间间隔更新游戏逻辑,以防出现延迟?
因为如果存在“滞后”,则意味着显示不会以 60 fps 更新,即使是(如果您在单独的工作人员中执行物理),它也会再次显示相同的帧。
总而言之,您可能需要比图形引擎“更快”地运行物理引擎,但绝不会相反。
此外,在动作脚本中,您不能比实际帧速率更快地触发滴答声:对 Timer、setTimeout、setInterval... 的任何调用最多将与显示同步,但永远不会更快,这就是您必须调用物理引擎的原因在主循环中手动几次,而不是仅仅将滴答声设置为 60 fps