setTimeout的执行不会阻止进一步的迭代发生-需要其他解决方案
setTimeout executing is not stopping further iterations from occurring - need other solution
我正在制作一款使用jQuery和javascript的打字游戏。它作为一款单人游戏运行得很好,你可以在http://typetothestars.bitballoon.com/上自由地玩它。然而,我计划继续提高它的复杂性。所以我现在正在尝试添加multiplayer。
这里是jsfiddle - images https://jsfiddle.net/u32s4yty/
我的问题在于我的runRace函数。我期待着玩家1的比赛,当间隔结束时,玩家2的比赛将重新开始。相反,它会立即运行所有迭代。显然setTimeout在这里不起作用。
关于如何使它工作有什么建议吗?
谢谢!
// ** RUNNING GAME FUNCTIONS ** ''
//hides instructions and reveals game
function setupRace(i) {
console.log("In Race Setup")
$("#word").show();
document.getElementById("word").focus();
generateWords();
$(".toType").text(gameWords[0]);
$("#instructions").hide();
$(".wordDisplay").show();
$(".player").show();
var playerAvatar = 'url("images/' + playerInfo[i].avatar + '.png")'
$(".player").css({background: playerAvatar});
}
//game timer - IS NOT STOPPING THE OTHER FUNCTIONS FROM RUNNING
var timeoutID;
function timer(i) {
timeoutID = window.setTimeout(checkEndRace, 3000, i)
console.log("i = " + i);
console.log(playerInfo[i]);
}
function checkEndRace(i) {
console.log("in check end race - num players " + numPlayers);
if (i < numPlayers - 1) {
setupRace(i);
}else {
endRace(i);
}
}
//advances ship on correct typing
function runRace() {
console.log("In run race");
var i = 0;
while (i < playerInfo.length) {
console.log("in run race loop");
setupRace(i);
timer(i);
//timer is skipping ahead to the next iteration, eventhough
//checkEndRace hasn't run yet
var j = 1;
$(document).keyup(function(e){
var targetWord = $(".toType").text();
var typedWord = $("#word").val();
while (j < gameWords.length){
if(typedWord === targetWord){
$(".player").css({left: "+=15px",});
targetWord = $(".toType").text(gameWords[j]);
$("#word").val("");
j++;
}else {
return
};
}
});
i ++;
};
}
我希望使用setTimeout来停止以下函数的所有函数,直到间隔完成。
对setTimeout的调用立即返回并且只执行一次,因此处理它们排序的一种简单/常用方法是对setTimeout进行尾调用(tick)并将所有请求放入队列中。
// ** RUNNING GAME FUNCTIONS ** ''
var raceHandlers = [];
var raceTimout = 3000;
function tick() {
// Tail call
if (raceHandlers.length > 0) {
var action = raceHandlers.pop();
setTimeout(action[0],raceTimeout,action[1]);
}
}
//hides instructions and reveals game
function setupRace(i) {
console.log("In Race Setup")
$("#word").show();
document.getElementById("word").focus();
generateWords();
$(".toType").text(gameWords[0]);
$("#instructions").hide();
$(".wordDisplay").show();
$(".player").show();
var playerAvatar = 'url("images/' + playerInfo[i].avatar + '.png")'
$(".player").css({background: playerAvatar});
tick();
}
//advances ship on correct typing
function runRace() {
console.log("In run race");
var i = 0;
while (i < playerInfo.length) {
console.log("in run race loop");
//setupRace(i);
raceHandlers.unshift([setupRace,i]);
//timer is skipping ahead to the next iteration, eventhough
//checkEndRace hasn't run yet
var j = 1;
$(document).keyup(function(e){
var targetWord = $(".toType").text();
var typedWord = $("#word").val();
while (j < gameWords.length){
if(typedWord === targetWord){
$(".player").css({left: "+=15px",});
targetWord = $(".toType").text(gameWords[j]);
$("#word").val("");
j++;
}else {
return
};
}
});
i ++;
};
raceHandlers.unshift([endRace,playerInfo.length]);
tick();
}
相关文章:
- 计时器在使用 jQuery 一分钟后没有触发,或者每 1 分钟后给出一些其他解决方案来触发功能
- 在IE8和其他带有javascript的浏览器中获取正文类的标准解决方案是什么
- 下划线where with or condition(下划线、lodash或任何其他解决方案)
- 如何在之后附加或其他解决方案
- 我正在尝试遍历所有字母表的数组并将所有其他字母大写.任何解决方案
- jQuery $.browser 是未定义的.尝试了其他解决方案,但没有奏效
- 任何其他取代可见性崩溃的解决方案
- 将文本框中的信息发布到其他解决方案的另一个文本框中
- 解除绑定实际上并不起作用:还有其他解决方案吗
- Javascript模板或其他解决方案
- D3js响应堆叠条形图-其他主题解决方案不起作用
- 有没有一种方法可以为querySelectors编写开关语句或其他解决方案
- 如何在ES6中分离Jsx内部渲染函数到一个单独的文件?或任何其他解决方案,以分离逻辑和表示
- 如何在Javascript变量内编写for循环,或者是否有其他解决方案
- 如何打开/关闭$(document).click()事件或其他解决方案
- 与其他解决方案相比,内置的ng表分页在性能上存在问题
- setTimeout的执行不会阻止进一步的迭代发生-需要其他解决方案
- 如何使用nodejs iconv模块(或其他解决方案)在nodejs javascript中将字符编码从CP932转换为
- 文档.execCommand复制命令不工作或其他解决方案
- 得到一个未定义的索引错误,不知道为什么完全不知道为什么,似乎找不到任何其他解决方案