2016-12-23 3 views
1

なぜこのヒット検出が機能しないのかわかりません。私は>、および幅と高さの値を変更しようとしましたが、実際の結果は得られません。私は、その内部の関数が機能していないことを保証するために、検出の内部にprintln()関数を配置しました。ヒット検出の問題

コード:

for(var b = 0; b < particles.length; b++) { 
    if(particles[a] === particles[b]) { 
     b++;  
    /*particle[a][3] OR particle[b][3] shows the x point.*/ 
    /*particle[a][4] OR particle[b][4] shows the y point.*/ 
    /*a is defined in a for loop just like the for loop above (for b).*/ 
    } else if(particles[a][3]+10 > particles[b][3] && particles[a][3]-10 < particles[b][3] && particles[a][4]+10 > particles[b][4] && particles[a][4]+10 < particles[b][4]) { 
     var temp = particles[a][5]; 
     particles[a][5] = particles[b][5]; 
     particles[b][5] = temp; 
     println("hi"); 
    } 
} 

プロジェクトにもう少し裏話。基本的には、ポイント(「パーティクル」)のリストを持つ配列があり、それらが互いに衝突して反対方向に向くようにヒット検出システムを持たせたいと思います。

助けていただけたら幸いです!


最終作業コード:

まず
for(var b = 0; b < particles.length; b++) { 
    if(a !== b && particles[a][3] > particles[b][3]-10 && particles[a][3] < particles[b][3]+10 && particles[a][4] > particles[b][4]-10 && particles[a][4] < particles[b][4]+10) { 
     var temp = particles[a][5]; 
     particles[a][5] = particles[b][5]; 
     particles[b][5] = temp; 
     println("hi"); 
    } 
} 
+1

の可能性のある重複した[Javascriptを:衝突検出](http://stackoverflow.com/questions/2440377/javascript-collision-detectionを) –

+1

@ScottMarcusその投稿は役に立たない。私は衝突の仕組みを理解していますが、何らかの理由でこれは特にありません。また、その投稿にはjqueryの回答がたくさん含まれています(これは私が使っていないものです)。 – bdkopen

+1

あなたのコードのどこかに 'println'が定義されていますか?そうでない場合、これはエラーを投げるでしょう。 – Dom

答えて

2

particles[a] === particles[b]手段、およびときa === b

だけparticles[a] === particles[b]あなたは再びループ単位bのために、その後、Bをインクリメントするとき、第二に真であることができます。 ..あなたが粒子を逃すことを意味する!!

この試してみてください。

for(var b = 0; b < particles.length; b++) { 
    if(a === b) { 
     continue;  
    } else if(particles[a][3]+10 > particles[b][3] && particles[a][3]-10 < particles[b][3] && particles[a][4]+10 > particles[b][4] && particles[a][4]+10 < particles[b][4]) { 
     var temp = particles[a][5]; 
     particles[a][5] = particles[b][5]; 
     particles[b][5] = temp; 
     println("hi"); 
    } 
} 

あるいは

for(var b = 0; b < particles.length; b++) { 
    if (a !== b && particles[a][3]+10 > particles[b][3] && particles[a][3]-10 < particles[b][3] && particles[a][4]+10 > particles[b][4] && particles[a][4]+10 < particles[b][4]) { 
     var temp = particles[a][5]; 
     particles[a][5] = particles[b][5]; 
     particles[b][5] = temp; 
     println("hi"); 
    } 
} 
+1

まだ結果が得られていません。私は幅/高さを100まで上げようとしましたが、何も得られません。ちょうど再チェックされた私は正しい配列を呼んでいた... – bdkopen