javascript - 如何在Javascript中正确声明和调用3维 map ?

标签 javascript html arrays object 3d

我正在以等距方式编写《我的世界》类型的游戏。

基本上我有我的 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/

相关文章:

javascript - 如何在我的 coffee.vim 语法文件中突出显示 "->"符号?

javascript - Flot 未正确显示时间戳/日期

c# - 数据密集型应用程序的电话差距与单点触摸

Java ArrayList如何添加类

javascript - 回车的跨浏览器按键处理?

javascript - 删除逗号以分隔 D3 中数千个轴标签的组

javascript - 如何防止 "my own"javascript代码打开新窗口?

javascript - 在 javascript 中打开/保存文件

javascript - 如何使用 Express res.send() 发送数组

java - 使用循环自动填充和数组,无需提示。