2015-10-16 39 views
0

我创建了一个小型浏览器游戏,并且正在编写资源处理程序。
我正在使用PHP和MySQL数据库。 我意识到,我不能更新数据库每秒钟增加我的资源,所以读#2,我发现这个职位:浏览器游戏PHP + MySQL每秒增加资源

我也想做一个网络游戏在PHP中,也遇到这个 问题。我的解决方案非常简单。假设你是 使用不同的城市或行星,你将需要一个数据库表 城市/星球。在这个数据库中,你存储当前资源和每小时的资源。还有一个时间戳。

升级资源工具(金矿为例)我有了所有与开始时间和结束时间 建设疑问句一个 数据库。

然后,我制作了一个页面,包含在游戏的每一页上。它 首先检查是否有 是自上次输入数据库以来 应完成的选定城市的任何建筑物问题。如果那个黄金 矿完成了,比如说12.00,你所在城市的时间戳是 11.00,当前时间是13.00。该页面执行的操作会计算11.00到12.00时间的所有资源。然后它会更新城市表格中每小时的金币数量。然后从12.00到13.00重新计算 资源。

当以上全部完成时,它将时间戳放在当前。但作为 你有第二次运行每小时的所有资源,你可以将 它存储在一个数组中,让本地定时器运行以更新 屏幕上的资源。但是,由于您在每个页面上都包含上述页面,因此当您转到下一页时,它将访问数据库以查看当前资源应该是什么 。所以本地数据仅用于 查看。 通过DutchEcho

这是链接:LINK

我编程的事件队列,一切都很好。现在的问题是如果玩家在线,则增加资源。
如果我通过time()保存玩家的last_login然后我计算出新的生产量我有一个问题:

"UPDATE `stats` SET `rock` = `rock`+(('".time()."' - $last_login)*$rock_production) 

我做的:时间() - $ LAST_LOGIN。如果我在每次玩家重新加载或更改页面时保存last_login,则此差异总是为0.
因为两次相等。
我该如何每秒增加资源?

回答

0

而不是在每个页面加载时更新last_login,只有在启动会话时才更新。您可能会在每次加载页面时更新第二个字段,并将差异用于计算。即使在用户断开连接后,这两个字段也可用于指示最近的“在线时间”的持续时间。

[编辑]:

如何使用更新触发器?在一个语句中,您可以同时使用last_login的值 - 新值和原始值。

+0

你好,谢谢你的回答。我可以做到这一点,但我认为我的问题将是相同的。我总是会计算一个0-差异,而且我不能使用last_login(当我开始会话时保存)导致last_login和current_time之间的差异,玩家可能会花费一些资源。 – Vito

+0

是那个洞查询?所以你会更新所有的行 –

+0

不,这是代码的一部分 – Vito