2016-09-14 19 views
1

こんにちは仲間のプログラマーを座標検出、複数のアレイは、キャンバスに

今日、私はキャンバスを使用して、ちょっとタワーディフェンスのように作っている私のプロジェクトの1に近い関連質問があります。しかし、私は1つの座標で複数の円を検出しようとしました。ここに私の例があります:

for (var a = 0; a < buildArcherX.length; a++) { 
    for (var a = 0; a < buildArcherY.length; a++) { 
     if (Math.sqrt(Math.pow(buildArcherX[a] - this.x, 2) + Math.pow(buildArcherY[a] - this.y, 2)) <= arch.radius + 7) { 
      this.attackedByArcher = true; 
     } else { 
      this.attackedByArcher = false; 
     } 
    } 
} 

この例でわかるように、私は "防御"のために座標を配置するために配列を使用しています。 forステートメントは、配列内のすべての「防衛」座標を通過します。コード内のifステートメントは、いずれかの防衛座標が「this」座標内にあるかどうかを計算します。いずれかの防御が範囲内にある場合、これはブール値を返します。

しかし、私はこの点に着いて、この問題に立ち往生しています。複数の防御が範囲内にある場合はどうなりますか?それから、「これ」はもっと大きなダメージを受ける必要があります。だから私は範囲内の防衛の番号を表示することができますか?

ありがとうございます!

+0

おそらく真偽の代わりにfor-loopsにカウンタを入れますか? 'var counter = 0; for ... for ... if(...){counter ++} 'と' return(counter) ' – markE

答えて

1

整数を使用して防御範囲内の防御数を格納し、防御範囲内で防御範囲が見つかるたびに増加させることができます。

また、ループをネストするときは、2つの異なる変数を使用する必要があります。

this.defensesInRange = 0; 
for (var x = 0; x < buildArcherX.length; x++) { 
    for (var y = 0; y < buildArcherY.length; y++) { 
     if (Math.sqrt(Math.pow(buildArcherX[x] - this.x, 2) + Math.pow(buildArcherY[y] - this.y, 2)) <= arch.radius + 7) { 
      this.defensesInRange += 1; 
     } 
    } 
} 
+0

ループの下で実行されているとどうなりますか?その後、数はループの下で数億回増加します。 – Bob

+0

あなたは何を意味するのか分かりません。第3のループはありますか? – Jarvis

+0

私はループするsetInterval関数を持っています。 – Bob

関連する問題