Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Loops 尝试创建可以停止使用函数doIt()的无限for循环_Loops_For Loop_Infinite - Fatal编程技术网

Loops 尝试创建可以停止使用函数doIt()的无限for循环

Loops 尝试创建可以停止使用函数doIt()的无限for循环,loops,for-loop,infinite,Loops,For Loop,Infinite,嘿,伙计们,我是javascript新手,我正在为期末考试做一个项目。我需要使我操纵的这个游戏引擎使生成按钮进入无限循环 我还需要使用(Reset==1)停止它。有什么帮助吗?以下是我目前掌握的代码,如果这有帮助的话: function generation() { for(y2=0; y2<2500; y2++) { tempmapactual[y2]=mapactual[y2]; } for (g=0;g<2500;g++) { neighbours=0;

嘿,伙计们,我是javascript新手,我正在为期末考试做一个项目。我需要使我操纵的这个游戏引擎使生成按钮进入无限循环

我还需要使用(Reset==1)停止它。有什么帮助吗?以下是我目前掌握的代码,如果这有帮助的话:

function generation()
{

 for(y2=0; y2<2500; y2++) 
 {
  tempmapactual[y2]=mapactual[y2];
 }

 for (g=0;g<2500;g++)
 {
  neighbours=0;
  for (h=0;h<8;h++)
  {
   if (g+coords[h]>0 && g+coords[h]<2499 && mapactual[g+coords[h]]=="white.gif") 
   {neighbours=neighbours+1;} 
  }
  if (neighbours>=4 || neighbours==1 || neighbours==0) 
   {tempmapactual[g]="black.gif";}

  if (neighbours==3) {tempmapactual[g]="white.gif";}
 }

 for(y3=0; y3<2500; ++y3) 
 {
  if (mapactual[y3]!=tempmapactual[y3])
  {
   mapactual[y3]=tempmapactual[y3];
   document.images[y3+offset].src=mapactual[y3];
  }
 }

} 




</script> 

<script>
function doIt()
{
   for (i=0; i<X; i++)
  {
    // This is where I have trouble. What part of generation() do I call?
  }

     if (Reset==1) break; // This will kill the loop instantly.
  }
}
</script>

<script>
window.onload(doIt($(X).value)));
</script>


<form> 
<input type="button" value="generate" onClick="generation();"> 
</form>

<form>
<input type="text">
</form>

<form>
<input type="button" value="Infinite Loop!" onclick="doIt();"> 
</form>

<form>
<input type="button" value="Reset" onclick="doIt();">
</form>
函数生成()
{

对于(y2=0;y2JavaScript不是多线程的,您不能轻易地跳出无限循环。大多数浏览器/JavaScript会检测到失控的旋转并终止执行


如果您正在编写游戏引擎,更好地利用CPU周期的方法是设置计时器。这样,您可以在不再需要计时器时停止计时器。

我想您想了解一下计时延迟。每当JavaScript忙着运行时,都会计算(包括使用
generate()
)它对按钮按下之类的操作没有反应。您希望限制这种情况发生的次数。

没有线程,您无法从另一个函数中跳出已经运行的无限循环;但是您可以采取稍微不同的方法:如果您的“无限循环”通过函数运行一次迭代,然后使用
setTimeout
回调在一段时间间隔后再次调用自身,然后它将“连续”运行,同时仍然可以中断(比如说,在
doIt
函数中设置一些全局标志变量,它可以在调用时检查
generation
,如果为真则退出。

我将标题中的函数名读作“dolt”我还以为你想成为一个有趣的人。哈哈,不幸的是没有。辛普森一家还在电视上吗?那篇文章非常有用!但是,我能不能把这个setTimeout附加到onClick上呢?@JoeOzz我的教授说,你能在onClick callbackSo中用标准代码做什么那我们就错了代码…太棒了!哈哈,谢谢大家的深刻回应!我喜欢这个网站!如果generation()是通过onClick激活的,你会怎么做呢?我不确定clearTimeout是否可以通过onClick调用,这正是我的教授所期望的。你不需要清除超时,只要在doIt中设置一个全局变量就可以了(
var continue=false;
),然后在
generation()
的顶部输入
如果(!continue)return;
-下次调用
generation
时,它将退出,并且不会为自己设置另一个超时回调。