2017-10-01 49 views
0

我有一個點的網格,我在我的應用程序開始時使用for循環做出了這些點。每個點有兩個數組,一個名爲objectsAroundMe,另一個名爲pointsAroundMe。使用網格點來檢測對象是否在範圍內

目的是如果對象是點附近(使用for循環對象和點)

檢測之後檢測然後如果對象是在範圍我們把它推到point.objectsAroumdMe陣列。

我有這一切都很好,工作,但問題是得到的意見,當對象不再靠近釋放引用,我試着運行if語句來做到這一點,並使參考爲空,但它不起作用。如果有這樣做的有效方式,那麼只有一個參考從陣列移動到陣列,那麼這將是完美的。接下來我要嘗試使用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; 
       } 
      } 
     } 
      } 

////第二個循環用於命中測試從點到對象的傳遞數組。

 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

distanceBetween:返回Math.sqrt((X1 - ×2)** 2 +(Y1 - Y2):該對象並使用點之間的距離** 2);

此=所討論的對象(以避免雙for循環)

pointGrid =點的網格,共90分通過mapwidth相等間隔/密度

+0

如何處理一些代碼片段? – Tomer

+0

代碼位於不同的位置,如果我要將所有與此相關的代碼放在這裏,恐怕您會花一些時間仔細查看它。然而,如果有必要,我會提交,如果不是12點,我會打瞌睡,我打算在早上提交代碼,我很欣賞你的努力,但如果沒有,我必須睡一覺。今天就試着讓它工作。 *像90年代的技術一樣擊中屏幕* *像2k技術一樣的屏幕突破* -​​_-' – static660

+1

我們不需要看到所有的代碼,但是一個小的可重複使用的例子會很棒。 For循環刪除引用當然是可能的,但沒有看到你的任何失敗的嘗試,我們很難提供幫助。 – Keith

回答

0

我後終於放棄發現在這種技術2周後,它確實表現不如預期,現在我將採取類似的方法,我將很快通過:(函數和操作順序)上傳我的代碼。

相關問題