Создание 2D-массива в UnityScript путем создания массива массивов

Итак, я работаю в Unity 3D с UnityScript, пытаясь создать генератор пещер с использованием клеточных автоматов. Вот моя проблема: я создал две переменные, ширину и высоту, и они должны соответствовать размеру моего 2D-массива. Я также создал функцию для создания карты при запуске, поэтому массив необходимо инициализировать при запуске. Я знаю, что мне нужен какой-то цикл for с использованием .length и одной из переменных, но я не совсем уверен, как это сделать. Любая помощь будет здорово!


person Big_Guy    schedule 05.11.2015    source источник
comment
разместите свой код и мы поможем   -  person Alpha G33k    schedule 05.11.2015
comment
Я обнаружил, что часто проще использовать одномерный массив и обращаться к нему двумерно (в JS вычислить координаты).   -  person ssube    schedule 05.11.2015
comment
Изменены ссылки на JavaScript на UnityScript, так как это технически так и есть. wiki.unity3d.com/index.php/UnityScript_versus_JavaScript   -  person user3071284    schedule 05.11.2015


Ответы (2)


Если все строки в вашем 2D-массиве имеют одинаковую длину, вам не нужно писать цикл, просто проверьте длину произвольной строки, т.е.

var arr = [
  [1, 2, 3],
  [1, 2, 3],
  [1, 2, 3],
  [1, 2, 3],
];
var height = arr.length; //4
var width = arr[0].length; //3

Пример, в котором вам нужно было бы выполнить цикл, - это если бы все ширины были разной длины, т.е.

var arr = [
  [1, 2, 3],
  [1, 2, 3, 4]
];

var widths = [];
for (var i = 0; i < arr.length; i++) {
  widths.push(arr[i].length);
}
console.log(widths); // [3, 4]

Вот как вы создаете массив 2d с учетом высоты и ширины

var height = 5,
width = 4;

var arr = [];
for (var i = 0; i < height; i++) {
  arr[i] = [];
  for (var j = 0; j < width; j++) {
    arr[i][j] = "x";
  }
}
console.log(arr);

// [ [ 'x', 'x', 'x', 'x' ],
//   [ 'x', 'x', 'x', 'x' ],
//   [ 'x', 'x', 'x', 'x' ],
//   [ 'x', 'x', 'x', 'x' ],
//   [ 'x', 'x', 'x', 'x' ] ]
person Robert Corey    schedule 05.11.2015
comment
Длина и ширина массива определяются переменными, поэтому я не думаю, что смогу создать экземпляр этого массива без использования цикла. Например, длина моего массива может быть от 10 до 100 в зависимости от того, как работает генерация, поэтому эта переменная должна быть длиной массива. После того, как я это сделаю, мне нужно будет сделать так, чтобы каждое значение в первом массиве имело в нем массив с размером, равным второй переменной. Длина и высота даже не будут известны, пока я не запущу код. Вот почему я думаю, что мне нужно сделать массив с помощью цикла. Спасибо, что нашли время посмотреть! - person Big_Guy; 05.11.2015
comment
Я отредактировал свой вопрос на то, что, по моему мнению, отвечает на ваш вопрос. Если это все еще не помогает, опубликуйте образец кода. - person Robert Corey; 05.11.2015
comment
Спасибо за помощь Роберт! - person Big_Guy; 06.11.2015

Эх, в Unity вы бы просто инициализировали их так:

int gridSpace[,];
public int height;
public int width;

void Start()
{
   gridSpace = new int[height,width];
   MakeMapStuffHappen();
}

Это позволит указать высоту и ширину в редакторе (или программно)

person Jesse Williams    schedule 14.01.2016