Javascript Java脚本正在忽略infinte循环中当前的setInterval
我目前正在做乌龟和兔子的家庭作业。我应该显示乌龟和兔子在移动,直到它们撞到70块瓷砖,然后脚本结束。除了一次显示所有移动外,所有操作都在运行,但我希望它每秒显示一个移动,但它当前忽略了我的设置间隔。下面是我的代码 编辑:我已经修复了它,所以它一次只显示一个移动,但现在一旦它到达终点,它会在选择赢家后继续移动。我想我有一个带有setInterval的无限循环,但我不确定我需要在哪里编辑代码Javascript Java脚本正在忽略infinte循环中当前的setInterval,javascript,html,css,Javascript,Html,Css,我目前正在做乌龟和兔子的家庭作业。我应该显示乌龟和兔子在移动,直到它们撞到70块瓷砖,然后脚本结束。除了一次显示所有移动外,所有操作都在运行,但我希望它每秒显示一个移动,但它当前忽略了我的设置间隔。下面是我的代码 编辑:我已经修复了它,所以它一次只显示一个移动,但现在一旦它到达终点,它会在选择赢家后继续移动。我想我有一个带有setInterval的无限循环,但我不确定我需要在哪里编辑代码 <html> <head> <title>Tortoise an
<html>
<head>
<title>Tortoise and hare</title>
<script type = "text/javascript">
var posH = 1;
var posT = 1;
var track = new Array (70);
var intervalId;
function outputArray(theArray)
{
document.writeln("<table border = \"1\"");
document.writeln("<tbody><tr>");
var toPrint = " ";
for (var i = 1; i <= theArray.length; i++)
{
toPrint = " ";
if (i == posT) toPrint = "T";
if (i == posH) toPrint = "H";
if ((i == posT) && (i == posH)) toPrint = "OUCH!!!";
document.writeln("<td>" + toPrint + "</td>");
}
document.writeln("</tr></tbody></table>");
}
for (var i = 0;i < track.length; ++i)
track[i] = i;
outputArray(track);
function updateClock(){
moveposT();
moveposH();
if (posT > 69) posT = 69;
if (posH > 69) posH = 69;
outputArray(track);
if ((posH >= 69) || (posT >= 69))
raceEnds();
}
function raceStarts(){
document.write("BANG !!!!!<br/>AND THEY'RE OFF !!!!!<br/>");
outputArray(track);
intervalId = window.setInterval(updateClock, 100);
}
function moveposT(){
i = Math.floor( Math.random() * 11);
if ((i >= 1) && (i <= 5)){
posT = posT + 3;
}
if ((i >= 6) && (i <= 7)){
posT = posT - 6;
}
if ((i >= 8) && (i <= 10)){
posT = posT + 1;
}
if (posT < 1){
posT = 1;
}
}
function moveposH()
{
i = Math.floor(Math.random() * 11);
if ((i >= 1) && (i <= 2)){
posH = posH + 0;
}
if ((i >= 3) && (i <= 4)){
posH = posH + 9;
}
if (5 == i){
posH = posH - 12;
}
if ((i >= 7) && (i <= 8)){
posH = posH + 1;
}
if ((i >= 9) && (i <= 10)){
posH = posH - 2;
}
if (posH < 1){
posH = 1;
}
}
function raceEnds()
{
clearInterval(intervalId);
if ((posT == 69 ) && (posH == 69 ))
document.write("<br/><br/><b>It's a tie.</b>");
else {
if (posT >= 69)
{
posT = 69 ;
document.write("<br/><br/><b>Tortoise wins!!! Yay!!!</b>");
}
if (posH >= 69)
{
posH = 69 ;
document.write("<br/><br/><b>Hare wins.Yuck!</b>");
}
}
}
</script>
</head>
<body onload="raceStarts();">
</body>
</html>
龟兔
var-posH=1;
var-posT=1;
var轨道=新阵列(70);
var有效期;
函数输出阵列(theArray)
{
document.writeln(“关于@MarkMeyer的评论:
您正在将updatelock
的结果传递给setInterval
。您需要传递函数本身而不调用它(即不调用()
)。它看起来也像是在调用窗口。setInterval
多次,并且会同时运行大量计时器
关于@MarkMeyer的评论:
您正在将updatelock
的结果传递给setInterval
。您需要传递函数本身而不调用它(即不调用()
)。它看起来也像是在调用窗口。setInterval
多次,并且会同时运行大量计时器
您正在将updatelock
的结果传递给setInterval。您需要传递函数本身而不调用它(即不调用()
)。它看起来也像你在调用window.setInterval
很多次,而且会有很多计时器同时运行。是的,这正是我必须要做的,我只需要传递函数本身,而不调用它。正如你所说,我确实有多个计时器同时运行,我现在正在尝试调试它,并找出它需要的位置要删除。感谢您的帮助!您正在将updatelock
的结果传递给setInterval。您需要传递函数本身而不调用它(即不调用()
)。它看起来也像你在调用window.setInterval
很多次,而且会有很多计时器同时运行。是的,这正是我必须要做的,我只需要传递函数本身,而不调用它。正如你所说,我确实有多个计时器同时运行,我现在正在尝试调试它,并找出它需要的位置s将被删除。感谢您的帮助!答案由@MarkMeyer提供,请不要简单地复制粘贴答案。是的,一旦它完成,至少一次,它将继续转到新的。我不确定我需要在何处修正设置间隔,以便在选择赢家后,它将停止而不是再次调用。答案由@MarkMeyer提供,请不要简化y复制粘贴答案。是的,一旦它完成,至少一次,它会继续转到新的答案。我不确定我需要在哪里调整设置间隔,以便在选择赢家后,它将停止,而不是再次调用。