我目前正在使用 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/