如何使倒计时计时器像在浏览器游戏


How to make countdown timer like in browser games?

我想知道如何在PHP中制作倒计时计时器。例如,在浏览器游戏中;当你建造一座建筑或开始研究时,该建筑会开始倒计时。当你关闭电脑或网站,从另一台电脑或其他地方打开它时,你会发现倒计时仍在工作。你能简要解释一下它是如何工作的吗?或者我应该在谷歌上搜索什么来了解它吗?

谢谢!

您将时间存储在服务器上,它可以是某个事物开始的时间(您需要知道持续时间),也可以是它结束的时间。

在客户端上,您读取该值,并根据从服务器获取的时间在浏览器中设置一个计时器。

下面是一个超级简单的例子,它将使用浏览器的localStorage来存储时间值。它将显示自您第一次打开示例以来经过的时间:http://jsfiddle.net/ceyw1v5a/

尝试刷新链接以查看计时器值的持久性。我想在这里做一个片段,但出于安全原因,它不允许使用localStorage。


无论如何,因为客户端计时器很容易被篡改,所以您应该永远不要依赖它!这意味着,假设你有一个游戏,当某个时间到期时,你会得到一枚金币,你应该始终在服务器上检查时间到期,因为恶意用户可以很容易地将计时器设置为零并调用服务器,但这取决于服务器是否真的到期了,或者是否有作弊企图。


更新

当你建造一座建筑或开始研究时,该建筑的倒计时开始了。

在这种情况下,这个过程会是这样的:

  • 用户单击"生成"按钮
  • 进行服务器调用以检查是否允许构建它(检查资源等),如果允许,它将存储该特定构建开始时的时间戳
  • 根据构建持续时间,计时器显示在客户端(浏览器)上,倒计时
  • 如果用户重新连接,将从服务器端存储读取所有建筑物的"当前建筑物"值,并根据剩余的持续时间重新启动客户端计时器
  • 当客户端的计时器到期时,将进行服务器调用(如上所述),如果服务器端的计时器也已到期(意味着建筑已完成),则删除客户端的计时器并显示已完成的建筑
  • 如果用户在建筑完成前离开,并在建筑完成后重新连接,则只需在客户端显示已完成的建筑,不需要计时器

从服务器获取数据的实际过程会有所不同,具体取决于您的应用程序结构。例如,您可以在游戏运行时进行AJAX调用以获取服务器数据,等等。

使用php获取当前时间并计算事件的结束时间。

<?php
$event_action_time = "3600"; // 1 hour in seconds
$time = time(); // current time
$endtime = $time + $event_action_time; // future date for event to end
// Store endtime in DB
?>

现在您有了结束时间,就可以在数据库中查询基于当前时间尚未结束的任何事件。如果有结果,那么可以将结束时间结果分配给php中的一个变量,并将其传递给jquery倒计时。