Итак, я работаю в Unity 3D с UnityScript, пытаясь создать генератор пещер с использованием клеточных автоматов. Вот моя проблема: я создал две переменные, ширину и высоту, и они должны соответствовать размеру моего 2D-массива. Я также создал функцию для создания карты при запуске, поэтому массив необходимо инициализировать при запуске. Я знаю, что мне нужен какой-то цикл for
с использованием .length
и одной из переменных, но я не совсем уверен, как это сделать. Любая помощь будет здорово!
Создание 2D-массива в UnityScript путем создания массива массивов
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
Длина и ширина массива определяются переменными, поэтому я не думаю, что смогу создать экземпляр этого массива без использования цикла. Например, длина моего массива может быть от 10 до 100 в зависимости от того, как работает генерация, поэтому эта переменная должна быть длиной массива. После того, как я это сделаю, мне нужно будет сделать так, чтобы каждое значение в первом массиве имело в нем массив с размером, равным второй переменной. Длина и высота даже не будут известны, пока я не запущу код. Вот почему я думаю, что мне нужно сделать массив с помощью цикла. Спасибо, что нашли время посмотреть!
- person Big_Guy; 05.11.2015
Я отредактировал свой вопрос на то, что, по моему мнению, отвечает на ваш вопрос. Если это все еще не помогает, опубликуйте образец кода.
- person Robert Corey; 05.11.2015
Спасибо за помощь Роберт!
- 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