如何在浏览器游戏中制作倒数计时器?

时间:2015-03-24 22:20:00

标签: php

我想知道如何在PHP中制作倒数计时器。例如,在浏览器游戏中;当你建造一座建筑物或开始研究时,该建筑物的倒计时开始等等。当你关闭计算机或网站并从另一台计算机或其他地方打开它时,你会看到倒计时仍然有效。你能简单解释一下它是如何工作的,或者我应该在google上搜索一下它有什么想法吗?

谢谢!

2 个答案:

答案 0 :(得分:2)

使用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 countdown

答案 1 :(得分:2)

您将时间存储在服务器上,可能是某个时间开始(您需要知道持续时间)或结束时间。

在客户端,您将读取此值并根据您从服务器获取的时间制作一个将在浏览器内打勾的计时器。

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

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


无论如何,因为客户端计时器很容易被篡改,你应该永远不会依赖它!这意味着,假设您有游戏,并且当某个时间到期时,您获得一枚金币,您应该始终检查服务器上的时间到期,因为恶意用户可以轻松地将计时器设置为零并进行服务器调用,但是由服务器决定时间是否真的过期或是否有作弊尝试。


更新

  

当您建造建筑物或开始研究时,该建筑物的倒计时开始等。

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

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

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