16 MHz 上跑城市模拟:SimCity 每帧只算十六分之一的子系统
来源:larstofus.com — 2025-11-16
📋 概述
原版 SimCity 官方最低配是 16 MHz 的 386SX,却要每帧跑交通、火灾、电力、犯罪一整套模拟。作者翻 2008 年以 GPL 开源的 Micropolis 源码,发现全部逻辑压在 s_sim.c 的 Simulate() 一个函数里,而它并不每帧全跑:真正的参数不是 deltaTime,而是一个 0 到 15 循环的 mod16,每帧只执行其中一个子系统。代价是平均 8 帧、最坏 15 帧的响应延迟,对城市模拟反而更像真实反馈。
🔑 核心要点
Simulate() 的入参是 0–15 的 mod16 计数器,每帧只跑其中一个子系统,等于把模拟摊到 16 帧。
平均 8 帧、最坏 15 帧的延迟,作者认为对城市模拟比即时反应更自然。
同一思路在别处也成立:Assetto Corsa 的 FACES_PER_FRAME 每帧只更新立方体贴图的部分面。
结论是一条可迁移的性能准则:写 gameplay 代码前先问「这段真的需要每帧跑吗」。
💡 金句
As an input lag for a shooter this would be obviously a disaster, but for the simulation of a city? I'd argue it might actually feel better than an instant reaction.
👍 0
❤️ 点赞
👎 0
沉底
← 返回 Hacker News 首页