我有一个点网格,我在我的应用程序开头使用for循环制作它们。每个点都有两个数组,一个名为objectsAroundMe,另一个名为pointsAroundMe。
目标是检测物体是否接近该点(对于物体和点使用for循环)
检测完后,如果对象在范围内,我们将其推送到point.objectsAroumdMe数组。
我所有这一切都很好并且正常工作,但是当对象不再接近时,问题就是释放引用了,我已经尝试运行if语句来做它并使引用为null但它没有不行。如果有一种有效的方法可以做到这一点,那么只有一个引用从一个数组移动到另一个数组,那么这将是完美的。接下来我将尝试使用array.splice和slice来复制amd paste引用。但是现在我尝试使用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循环,用于测试从点到对象的传递数组。
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:对象与点之间的距离使用:return Math.sqrt((x1 - x2)** 2 +(y1 - y2)** 2);
this =有问题的对象(避免双循环)
pointGrid =一个点网格,总共有90个点,由mapwidth / density
等间隔答案 0 :(得分:0)
我在2周后终于放弃了这项技术后发现它确实表现不如预期,现在我将采取类似的方法,我将通过以下方式上传我的代码:(功能和操作顺序不久。