javascript - 衡量时间流逝的脚本?

标签 javascript craftyjs

我目前正在使用 Crafty 为类(class)开发一款小游戏,我们的游戏需要时间流逝。为了提供上下文,这是一个类似 tamagotchi 的游戏,玩家控制一个生物并在需要时喂养它、梳理它等,所以我们需要测量诸如“每五分钟生物会饿一次”或“经过一定时间(比如 20 分钟)后,该生物将自然死亡,游戏将结束”。我的问题是我不确定解决此问题的最佳方法是什么。我应该使用 setInterval 吗?设置超时?我自己的定时器类?我不知道对于此类实例最常见的解决方案是什么。到目前为止,我已经尝试了前两个选项,但没有成功。

我还尝试寻找任何时间的 crafy 函数;我能找到的最接近的是 Crafty.bind("EnterFrame", function() { ... }),所以我可以逐帧“操纵”时间,但这也不起作用。提前致谢。

最佳答案

游戏开始时,使用new Date().getTime() 获取时间戳,并将其保存在变量中。定期(您可以使用 setInterval),将其与当前时间戳进行比较,并根据耗时采取行动。

我建议用定时事件构建一个数组,并从定时器回调中检查它的元素。像这样:

var startTime = new Date().getTime();

// List of timed events
// (times are in milliseconds)
var events = [
    { time: 5000, text: "do something after 5 secs"},
    { time: 10000, text: "do something after 10 secs"},
    { time: 20000, text: "do something after 20 secs"}
];

// Check for events every second
setInterval(function() {
    var timePassed = new Date().getTime() - startTime;
    console.log("passed: " + timePassed + " milliseconds");

    // Check all events
    for(var i=events.length-1; i>=0; i--) {

        // If an event has expired, remove it from the list,
        // (and do whatever tou need to do)
        if(events[i].time <= timePassed) {

            // log the event text to the console
            console.log(timePassed + "ms passed. " + events[i].text);

            // remove from array
            events.splice(i, 1);
        }
    }

}, 1000);

DEMO (打开浏览器控制台查看输出)。

关于javascript - 衡量时间流逝的脚本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16363247/

相关文章:

javascript - 导航标签不起作用

javascript - 如何在 JavaScript 中验证多部分表单数据的内容长度?

PHP 中的 Javascript 条件格式

javascript - 覆盖 craftyjs 中的函数

javascript - Nodejs DynamoDB 按映射项目扫描

Javascript->在 for 循环中迭代。子变量更改父变量的更改

javascript - 鼠标点击不会触发 Crafty.js 事件

相当于 Pygame.org 的 Javascript 游戏开发?

javascript - 内部函数中 "this"的范围(CraftyJS场景)

javascript - 狡猾的JS碰撞运动