2017-03-24 17 views
0

コンテキスト: 私は人気ゲームのバージョンを作成しています。そして、私がヘビの部分の同じ場所で食べ物の出現を避けようとするとき、私はいくつかの問題に遭遇する。スクリプトが実行されているときにGoogle Chromeがフリーズする

だから私は、フレームワークのフェイザーでこのコードを生成:

generateFood: function() { 
     var randomX, randomY; 
     var rightLocation = false; 
     var foodOnSnake = false; 

     while(rightLocation === false) { 
      randomX = Math.floor(Math.random() * (this.game.width/squareSize)) * squareSize; 
      randomY = Math.floor(Math.random() * (this.game.height/squareSize)) * squareSize; 
      foodOnSnake = false; 

      for (var i = 0; i < snake.length; i++) { 
       if (snake[i].x === food.x && snake[i].y === food.y) { 
        foodOnSnake = true; 
        break; 
       } 
      } 

      if(foodOnSnake === false) { 
       rightLocation = true; 
      } 
     } 
     food = this.game.add.sprite(randomX, randomY, 'snake', 15); 
    } 

狙い、ゲーム上のいくつかのランダムな座標を作成することです。そして、蛇の部分(forループ)で食べ物が生成されている間に、私は他の座標を生成します。しかし、知られていない理由で、私のヘビが最初の食べ物を食べた後、ゲームがクラッシュし、Google Chromeのタブが反応しません。 ループの間違いがあると思うが、見つけられない。

+0

ここには宣言されていないオブジェクト/変数があります。 –

+0

さらに多くの定義、特にスネークを追加してください。 –

+0

ここでは、 'food = this.game.add.sprite(randomX、randomY、 'snake'、15);に関係なく実行します。 。 –

答えて

4

あなたがループ内で更新することはありませんfood.xfood.yと蛇のセグメントの座標を比較する:

if (snake[i].x === food.x && snake[i].y === food.y) { 

私はあなたの代わりにrandomXrandomYにそれを比較したいと考えている:

if (snake[i].x === randomX && snake[i].y === randomY) { 

foodの値に応じて、あなたの関数は可能性があります無限ループでlts。

+0

それはそうだと思う問題の1つです。 –

+0

外部の視点がしばしば解決です。あなたは私の問題を解決しました。大いに感謝する :) – Lodec