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>
4

3 に答える 3

1

JavaScript はマルチスレッド化されていないため、無限ループから簡単に抜け出すことはできません。ほとんどのブラウザー/JavaScript は、制御不能なスピンを検出し、実行を強制終了します。

ゲーム エンジンを作成している場合、CPU サイクルをより有効に使用するには、タイマーを設定します。そうすれば、タイマーが不要になったときにタイマーを停止できます。

于 2010-05-06T23:57:15.433 に答える
1

スレッドがなければ、別の関数から既に実行中の無限ループを抜け出すことはできません。ただし、少し異なるアプローチを取ることもできます。「無限ループ」が、1回の反復を実行する関数によって発生し、setTimeoutコールバックを使用して一定間隔で自分自身を再度呼び出す場合、中断可能でありながら「連続的に」実行されます。 (たとえば、doIt関数にグローバルフラグ変数を設定すると、generation呼び出されたときにチェックし、true の場合は終了できます。

于 2010-05-07T00:04:10.733 に答える
0

タイミングの遅延に関するこの記事をご覧になりたいと思います。JavaScript がビジー状態で計算を行っているとき ( を含むgenerate())、ボタンを押しても反応しません。あなたはそれが起こる量を制限したい.

于 2010-05-07T00:04:06.753 に答える