我正在以等距方式编写《我的世界》类型的游戏。
基本上我有我的 X、Y、Z 和 block 类型。
如何声明这是最好的方式,以便当我输入 XYZ 坐标时,返回 block 类型?
EG
function block(x, y, z, type) {
this.x = x;
this.y = y;
this.z = z;
this.type = type;
}
var map = new Array();
map[0] = new Array();
map[0][0] = new Array();
map[0][0][0] = new Block(0,0,0,grass);
map[0][0][1] = new Block(0,0,1,stone);
....
//hundreds of times later
ctx.drawImage(map[myPositionX][myPositionY][myPositionZ].type);
我似乎无法理解如何在不弄乱的情况下做到这一点。
我可以只用对象来做到这一点吗?我必须有 3D 阵列吗?没看懂
更新
这真的是正确的方法吗?
//Map
function Block(x, y, z, type) {
this.x = x;
this.y = y;
this.z = z;
this.type = type;
}
var map = [];
for(var i = 0; i < 100; i++){
map[i] = [];
for(var j = 0; j < 100; j++){
map[i][j] = [];
for(var k = 0; k < 10; k++){
map[i][j][k] = new Block(i,j,k,"neutral");
}
}
}
最佳答案
已关注 this answer 。我创建了一个代码片段来向您展示如何将其集成到您的代码中。
您现在可以使用map[142][156][123]
访问您的位置
function setPropertySafe(obj) {
function isObject(o) {
if (o === null) return false;
var type = typeof o;
return type === 'object' || type === 'function';
}
if (!isObject(obj)) return;
var prop;
for (var i = 1; i < arguments.length - 1; i++) {
prop = arguments[i];
if (!isObject(obj[prop])) obj[prop] = {};
if (i < arguments.length - 2) obj = obj[prop];
}
obj[prop] = arguments[i];
}
function block(x, y, z, type) {
this.x = x;
this.y = y;
this.z = z;
this.type = type;
}
var map = {};
setPropertySafe(map, 142, 156, 123, new block(142, 156, 123, 'grass'));
console.log(map);
console.log(map[142][156][123].type);
关于javascript - 如何在Javascript中正确声明和调用3维 map ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42672065/