Попытка создать бесконечный цикл for, который может прекратить использование функции doIt () - PullRequest
0 голосов
/ 07 мая 2010

Привет, ребята, я новичок в javascript и делаю проект для моего финала в классе. Мне нужно сделать так, чтобы этот игровой движок, которым я манипулировал, заставлял кнопку генерации идти бесконечный цикл.

Мне также нужно остановить его с помощью (Сброс == 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>

Ответы [ 3 ]

1 голос
/ 07 мая 2010

Вы не можете выйти из уже запущенного бесконечного цикла из другой функции без потоков; но вы могли бы использовать немного другой подход: если ваш «бесконечный цикл» происходит посредством функции, выполняющей одну итерацию, а затем с помощью обратного вызова setTimeout для повторного вызова себя через некоторый интервал, тогда он будет работать «непрерывно», а все еще прерываемый (скажем, установив некоторую глобальную переменную флага в вашей функции doIt, которая generation может проверить, когда она вызывается, и выйти, если это правда.

1 голос
/ 07 мая 2010

JavaScript не многопоточный, и вы не можете легко выйти из бесконечного цикла.Большинство браузеров / JavaScript обнаруживают неконтролируемое вращение и уничтожение выполнения.

Если вы пишете игровой движок, лучше использовать циклы ЦП для установки таймера.Таким образом, вы можете остановить таймер, когда он больше не нужен.

0 голосов
/ 07 мая 2010

Я думаю, вы хотите посмотреть эту статью о задержках по времени. Всякий раз, когда JavaScript занят ходом вычислений (в том числе с generate()), он не реагирует на нажатия кнопок и тому подобное. Вы хотите ограничить, сколько это происходит.

...