所以我一直在尝试调试我正在编写的物理引擎,而对于需要分配2D数组阵列的多维空间散列图。
为什么这段代码会给我"无法读取属性'推送'未定义"?我的if语句和我试图推送到数组之间的界限是否发生了什么?
编辑"此"是指一个PhysicsEngine实例,它保留对"实体的引用"数组以及" hashmap"阵列。
function PhysicsEngine(game) {
this.game = game;
this.entities = [];
this.hashmap = createArray(32, 32);
}
for(var i = 0; i < this.entities.length; i++) {
//Array item may not be a Simulateable Entity
//this.entities[i].simulatePhysics(this);
this.entities[i].ResolveCollisions();
this.entities[i].Move();
hmx = Math.round(Math.abs(this.entities[i].x/32));
hmy = Math.round(Math.abs(this.entities[i].y/32));
if(!logged) {
console.log(this.hashmap);
console.log(this.entities[i]);
console.log(i, hmx, hmy);
console.log(this.hashmap[hmx], this.hashmap[hmy]);
logged = true;
}
if(!Array.isArray(this.hashmap[hmx])) {
this.hashmap[hmx] = [];
if(!Array.isArray(this.hashmap[hmx][hmy])) {
this.hashmap[hmx][hmy] = [];
}
}
this.hashmap[hmx][hmy].push(this.entities[i]);
}
答案 0 :(得分:2)
我认为这段代码:
this.hashmap[hmx] = [];
if(!Array.isArray(this.hashmap[hmx][hmy])) {
this.hashmap[hmx][hmy] = [];
}
不正确。特别是&#34; if&#34; condition测试this.hashmap [hmx] [hmy]是否为数组。问题是this.hashmap [hmx] = [](因为你之前设置了一行),所以this.hashmap [hmx] [hmy]是未定义的,javascript会抛出错误&#34; Undefined不是对象&# 34。
这可能是问题吗?