随时间或每秒变化的值

Values which change over time or every second

假设我们需要每秒更新 db 中的值,以用于类似游戏的场景,其中资源以某种时间速率变化。 例如:5 gold/sec 我想到了存储时间戳并按需计算。但是像仓库这样的场景只能容纳 x 数量的场景,其他 x 数量的场景在任何时间点增加或减少。 包括利率在不同时间点变化的情况。

我们在后端如何处理这种情况?

每秒更新一次数据库效率很低,所以使用时间戳和按需计算是个好主意。

如果一个仓库有存储限制,那么当你计算一个仓库现在应该有 5000 金,但它只有 space 1000,你只设置为 1000。

如果有人给你发金币(随机增加),你在添加新资源之前先计算仓库应该在什么位置。

如果有人偷了你的金币(随机减少),你也照做。

基本上,无论何时访问黄金数量,您都会根据上次更新时间将其更新为当前时间。

例如:

  • 1:00 - 我在 100/500 金币下注销,金币以 100/小时生成 (last_updated: 1:00)
  • 2:00 - 其他人登录并向我的村庄发送 200 金币(last_updated:1:00)
  • 3:00 - 资源到达我的村庄,所以我们计算新的黄金储存量:100 小时生产 + 200 来自发送者,现在总共 400 (last_updated: 3:00)
  • 4:00 - 有人突袭了我的村庄(last_updated:3:00)
  • 5:00 - 没有
  • 6:00 - 攻击者从我这里偷走了 200 金币,所以我们计算新的金币存储量:300 用于 hr 生产,但是 300 + 400 > 500,所以我们此时只有 500/500。攻击需要 200,所以 400/500 的结果是 -200。 (last_updated: 6:00)
  • 6:30 - 30 分钟后我重新登录,看到我的黄金价格为 450/500

费率变化示例(例如您的产品在离线时升级):

  • 0/1000 金币,100/小时,我有一些东西可以在 2 小时内完成,将产量提高到 200/小时
  • 你在 5 小时后重新登录(或者有人偷了,或者有人给了),现在是 100 * 2 + 200 * 3 = 800/1000

你会知道最后时间戳和当前时间

如果任何未决事件不改变费率,您可以将整个非活动时间视为相同的费率

如果汇率确实发生了变化,您需要知道汇率是在什么时间发生变化的。然后你有许多不同比率的段:如果示例从 1:00 开始,那么在 3:00 处你知道生产已更改,因此你可以有 2 个段:1:00 ~ 3:00, 3:00 ~ 6:00(您将非活动时间段按利率变化的时间划分)。您为每个段分配一个比率,然后您可以分别计算每个段的黄金增长并将它们加在一起。同样,只要访问黄金价值,您就可以这样做。