浏览器游戏PHP + MySQL每秒都在增加资源

时间:2015-10-16 17:18:02

标签: php mysql database browser

我正在创建一个小型浏览器游戏,我正在编写资源处理程序 我正在使用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 因为这两次是平等的 我怎样才能每秒增加资源?

1 个答案:

答案 0 :(得分:0)

不是在每次加载页面时更新last_login,而是在启动会话时更新。您可能有第二个字段,您在每个页面加载时更新,并使用差异进行计算。这两个字段也可以用来表示最近"在线时间的持续时间"即使在用户断开连接后也是如此。

<强> [编辑]:

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

相关问题