我有一個點的網格,我在我的應用程序開始時使用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相等間隔/密度
如何處理一些代碼片段? – Tomer
代碼位於不同的位置,如果我要將所有與此相關的代碼放在這裏,恐怕您會花一些時間仔細查看它。然而,如果有必要,我會提交,如果不是12點,我會打瞌睡,我打算在早上提交代碼,我很欣賞你的努力,但如果沒有,我必須睡一覺。今天就試着讓它工作。 *像90年代的技術一樣擊中屏幕* *像2k技術一樣的屏幕突破* -_-' – static660
我們不需要看到所有的代碼,但是一個小的可重複使用的例子會很棒。 For循環刪除引用當然是可能的,但沒有看到你的任何失敗的嘗試,我們很難提供幫助。 – Keith