我正在创建一个小型浏览器游戏,我正在编写资源处理程序 我正在使用PHP和MySQL数据库。 我意识到我无法每秒更新数据库以增加我的资源,所以在Stackoverflow上阅读,我发现这篇文章:
我也在尝试用PHP制作在线游戏并遇到这个问题 问题。我的解决方案非常简单。假设你是 使用不同的城市或行星,您将需要一个数据库表 城市/星球。在此数据库中,您可以存储当前资源和 每小时的资源。还有一个时间戳。
为了升级资源设施(例如金矿),我有一个 具有开始时间和结束的所有建筑问题的数据库 时间。
然后,我创建了一个包含在游戏中每个页面上的页面。它 首先检查是否存在 是选定城市的任何建筑问题 应该在上次输入数据库后完成。如果那金子 我的完成就是说12.00和你所在城市的时间戳是 11.00,当前时间是13.00。页面的作用是,它计算时间11.00到12.00的所有资源。然后它会更新 在市表中每小时金。然后重新计算 资源从12.00到13.00。完成上述所有操作后,它会将时间戳设置为当前时间戳。但是作为 你有第二次运行的每小时所有资源,你可以存储 它在一个数组中,让一个本地计时器运行来更新资源 屏幕。但是,由于您在每个页面上都包含上述页面, 当你转到下一页时,它将访问数据库以查看内容 目前的资源应该是。所以本地数据仅供参考 观看。 由DutchEcho
这是链接:LINK
我编制了事件队列,一切都很好。现在的问题是,如果玩家在线,就增加资源
如果我按last_login
保存播放器的time()
,然后我计算新的制作量,我就会遇到问题:
"UPDATE `stats` SET `rock` = `rock`+(('".time()."' - $last_login)*$rock_production)
我这样做:time() - $ last_login。如果我每次播放器重新加载或更改页面时都保存last_login,则此差异将始终为0 因为这两次是平等的 我怎样才能每秒增加资源?
答案 0 :(得分:0)
不是在每次加载页面时更新last_login,而是在启动会话时更新。您可能有第二个字段,您在每个页面加载时更新,并使用差异进行计算。这两个字段也可以用来表示最近"在线时间的持续时间"即使在用户断开连接后也是如此。
<强> [编辑]:强>
如何使用更新触发器?在单个语句中,您可以使用last_login的两个值 - 新值和原始值。