Итак, в данный момент я пытаюсь создать двумерную сетку для эффективности обнаружения столкновений и т. Д.
Основы настройки довольно просты, путем деления высоты и ширины объектов на I. можно найти их соответствующие «индексы», а затем выбросить значение в третье измерение массива в двух предыдущих координатах. Теоретически идея работает, но я не уверен, почему я не могу заставить код работать.
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 = [];
}
}
Итак, указанная ошибка c: TypeError: Невозможно прочитать свойство '2' из неопределенного. Свойство '2' отвечает одному из 2D-индексов, который ему не нравится. Я не совсем уверен, почему выдает эту ошибку. Это потому, что мне нужно вручную инициализировать вложенные массивы?
Любая помощь будет очень полезна, спасибо.