1

このかなり単純な JavaScript を作成しました。画面上を移動するボールまたは「分子」。あるボールが別のボールと接触すると、速度が入れ替わる機能を追加したいと考えていました。角度を気にする必要はありません。互いに接触すると、速度が入れ替わります。(ただし、速度を変更する代わりに、リンクされたコードで色の変更をコーディングしました)

分子がいつ接触するかを認識するために関数「どこか」を呼び出そうとしましたが、うまくいきませんでした。理由がよくわかりません。

コードへのリンク:

http://jsbin.com/arokuz/5/

主に次の 3 つの問題があるようです。

  • 2 つの分子が接触したときではなく、分子がランダムに変化しているように見えます。

  • 配列に 3 つの分子を設定すると、2 つだけが表示されます。

  • 関数メソッドを使用すると、配列内の直列の分子 (1 と 2 または 4 と 5) が接触したときしか認識できません...どうすればすべての分子をチェックできますか?

4

2 に答える 2

0

3つ作成されたときに2つしか表示されない理由は、最初のものがレンダリングされないためではなく、最後のものがレンダリングされないためです。これは、リスト内の次のものとの距離を比較して描画する方法のためです-これが最後であるため、次がないため、null エラーがスローされて続行されます (コンソールを確認してください)。

それらが「ランダムに」衝突を検出するように見える理由は、他のすべての分子に対してチェックしていないためです.リストの次の分子のみをチェックしています.とチェック。

分子に距離を検出させるには、ピタゴラスの定理を使用できます。通常、次のように使用します。

var distx = Math.abs(molecule1.x - molecule2.x);
var disty = Math.abs(molecule1.x - molecule2.y);
var mindist = molecule1.radius + molecule2.radius;
return Math.sqrt(distx*distx+disty*disty) < mindist;
于 2013-08-06T22:27:25.040 に答える