2017-10-01 5 views
0

グリッドポイントがあり、アプリケーションの最初にforループを使用して作成しました。各点には2つの配列があり、1つはobjectsAroundMe、もう1つはpointsAroundMeです。オブジェクトグリッドを使用してオブジェクトが範囲内にあるかどうかを検出する

目的は、オブジェクトが範囲内であれば、我々はpoint.objectsAroumdMe配列にプッシュオブジェクト点の近くにある場合、検出後

(両方のオブジェクトと点に対するforループを使用して)検出することです。

私はこのすべてをうまく利用していますが、オブジェクトが近づいていないときに参照を解放するという問題を抱えています。if文を実行して参照をnullにしてみましたが、動作しません。これを行う効率的な方法があれば、1つのリファレンスだけが配列から配列へと移動していましたが、それは完璧です。次に、array.spliceとsliceを使ってamdの貼り付けリファレンスをコピーしようとします。しかし、今はarray.filterとindexofを使ってみましたが、findindexは何も働かなかった。しかし、私はクラスに新しくなっているので、forループ反復Idを使用して "this"ステートメントを使用してオブジェクトを明確にするのであれば、 "this"オブジェクトのインデックスをどのように見つけるかの例を教えてくださいポイント配列から参照を削除します。

onHitTest(){ 
       for (let ii = 0; ii < jsEngine.pointGrid.length; ii++) { 
        let point = jsEngine.pointGrid[ii]; 
        let distanceBetween = calcTotalDistance(this.transform.x,this.transform.y,point.x,point.y); 
        let pointPosition = point.x + point.y; 


     if (!point.objectsAroundMe.includes(this)) { 
      if (distanceBetween < mapWidth/density*1.4) { 
       point.objectsAroundMe.push(this); 
       this.hitTestArray = point.objectsAroundMe; 
       this.pointArray = point.pointsAroundMe; 
       //console.log(this.hitTestArray); 
      } 


if(point.objectsAroundMe.includes(this)) { 
       if (pointPosition - distanceBetween > 100000) { 
        let indx= point.objectsAroundMe.indexOf(this); 
        point.objectsAroundMe[indx] = null; 
       } 
      } 
     } 
      } 

//// 2番目のforループは、渡された配列をポイントからオブジェクトにヒットテストします。オブジェクトと点との間の距離使用: - X2)** 2 +(Y1 - Y2)Math.sqrt((X1を返す

 for (let i = 0 ; i < this.hitTestArray.length; i++){ 
      let hitTestObject = this.hitTestArray[i]; 
      if(hitTestObject.transform=== null) 
       continue; 
      if(hitTestObject === this) 
       continue; 
      let distance = calc_distance(this.transform,hitTestObject.transform); 
      if (distance < hitTestObject.transform.width + hitTestObject.transform.width 
       && distance < this.transform.height + this.transform.height){ 
       //console.log("hit!") 
      } 

     } 
    } 

Mapwidth = 1000000と密度が10

間の距離であります** 2);

この

(ループの二重を回避するために)問題のオブジェクトを= pointGrid私は最終的にあきらめた後に判明等しくmapwidth /密度

+0

一部のコードスニペットについてはどうですか? – Tomer

+0

コードは別の場所にあります。ここに関連するすべてのコードをここに入れていれば、それを見て少し時間を費やすことになります。しかし、必要ならば私はそれを提出し、私はそれが午前中にコードを提出することを計画しています、私はあなたの努力に感謝しますが、これがなかったら私はいくつかの睡眠を取らなければならない今日私は十分にそれを働かせようとしています。 * 90's techのようなスクリーンに当たる* * 2k techのようなスクリーンブレイク* -_- ' – static660

+1

あなたのコードはすべて表示する必要はありませんが、小さな再解析可能な例は素晴らしいでしょう。参照を削除するループは確かに可能ですが、失敗した試行は見られませんが、私たちが手助けすることは本当に難しいです。 – Keith

答えて

0

離れた90点の合計点のグリッドを=このテクニックでは、実際には期待通りの性能を発揮していなかったので、今度は同様のアプローチをとるつもりです。私はコードをすぐに(関数と操作順序)を使ってアップロードします。

関連する問題