在多个警报和提示后面使用计时器

Using timer behind multiple alerts and prompts

本文关键字:计时器 提示      更新时间:2023-09-26

我有一个只使用纯javascript制作的游戏。它不是GUI,而是更像旧的命令行游戏,并使用输入提示。

的主要组成部分之一是时钟,它以小时表示,可以用逗号"time"进行检查,并告诉它们变量"time"的值。这是代码:

var timestrt = 1;
var timer = setInterval(function(){timestrt++;return timestrt;}, 86000); var time = timestrt;

测试后,我意识到时钟没有改变。所以我将其设置为 10 秒而不是 86 秒,以确保我等待的时间足够长,但它仍然不想工作

我知道这可能是由及时和持续的警报引起的,但我甚至不确定从哪里开始寻求解决方法。有什么想法吗?

编辑:是否可以
1. 从外部页面
检索计时器2. 将其与实际时钟实时或
3.在后台使用动画 gif 时钟并计算某些像素的位置作为时间?

不要使用本机提示和对话框,因为它们会停止脚本执行时间。而是使用模拟的,例如jQuery IU具有不会停止执行的提示和对话框。下面是一个示例:

$(function() {
    $( "#dialog" ).dialog();
    var timestrt = 1;
    var timer = setInterval(function(){
      timestrt++;
      var time = timestrt;
      $("#time").text(time);
    }, 1000);    
});

这是我的解决方法:

在启动提示之前调用此代码:

function initTime() {
    var now = new Date();
    stS = now.getSeconds();
    stM = now.getMinutes();
    stH = now.getHours();
   }

在提示完成后调用:

function computeTime() {
    var now = new Date();
    var reS = now.getSeconds();
    var reM = now.getMinutes();
    var reH = now.getHours();
    var elapS = reS - stS;
    var elapM = reM - stM;
    var elapH = reH - stH;
    if (elapM < 0) {
        reM = reM + 60;
        elapM = reM - stM;
    }
    if (elapS < 0) {
        reS = reS + 60;
        elapS = reS - stS;
    }

然后我将其转换为秒,以便于检查:

    var finalH = elapH * 3600;
    var finalM = elapM * 60;
    var finalS = finalM + elapS + finalH;

并根据经过的 86 秒组数检查/更改时间变量:

    if (finalS > 86 && finalS < 172) {
        time = 1;
    }
    if (finalS > 172 && finalS < 258) {
        time = 2;
    }
    if (finalS > 258 && finalS < 344) {
        time = 3;
    }
    if (finalS > 344 && finalS < 430) {
        time = 4;
    }
    if (finalS > 430 && finalS < 516) {
        time = 5;
    }
    if (finalS > 516) {
        time = 6;
        alert('5 A.M.');
        alert('A clock is chiming...');
        alert('6 A.M.');
        playing = false;
        alert('Thanks for playing! Goodbye!');
        }

这是我在多个提示和警报后面使用设置间隔/计时器的替代方案。最后一部分可能不需要,但由于它回答了我最初的问题,所以我把它包括在内。