因此,此刻,我正在尝试创建二维网格以提高碰撞检测效率。
设置的基础非常简单,通过将对象的位置高度和宽度划分,我可以找到它们各自的“索引”,然后将值放在前两个坐标处的数组的第三维中。从理论上讲,这个想法行得通,但是我不确定为什么我的代码无法正常工作。
export class CollisionGrid {
widthSegment : number;
heightSegment : number;
grid : object[][][] = [];
constructor(height : number, width : number, cellSize : number) {
this.widthSegment = Math.round(width / cellSize);
this.heightSegment = Math.round(height / cellSize);
}
addParticles(particles : Particle[]) : void {
for(let particle of particles)
this.addParticle(particle);
}
addParticle(particle : Particle) : void {
var ix = Math.round(particle.position.x / this.widthSegment);
var iy = Math.round(particle.position.y / this.heightSegment);
this.grid[ix][iy].push(particle); // This is the line throwing the error
}
queryGrid(position : ICoordinates) : object[] {
const ix = Math.round(position.x / this.widthSegment);
const iy = Math.round(position.y / this.heightSegment);
return this.grid[ix][iy];
}
resetGrid() {
this.grid = [];
}
}
因此,具体错误为: TypeError:无法读取未定义的属性“ 2” 属性“ 2”响应它不喜欢的2D索引之一。我不确定为什么会引发此错误。是因为我需要手动初始化嵌套数组吗?
任何帮助都将非常有帮助,谢谢。