Как вы можете инициализировать весь массив сразу в GML? - PullRequest
0 голосов
/ 05 мая 2018

Я хочу инициализировать весь массив одновременно, но я не могу найти ни одного примера того, как это делается.

Я хочу сделать что-то вроде этого:

int a [][] = {{0,1,0},
              {0,1,1},
              {2,1,0}};

Ответы [ 2 ]

0 голосов
/ 25 мая 2018

Если вы используете текущую версию GameMaker, существует синтаксис литерала массива в виде [...items] ( документация ). Так что вы можете сделать

a = [[0,1,0],
     [0,1,1],
     [2,1,1]];

и это будет нормально работать.

Единственное, на что следует обратить внимание, это приведет к созданию массива массивов (так работают массивы в большинстве языков), а не устаревшего специфичного для GML массива 2d, так что вам нужно будет использовать пару [index] аксессоров а не [index1, index2].

0 голосов
/ 06 мая 2018

К сожалению, GML не похож на многие другие языки в том смысле, что GML не имеет однострочной инициализации массива. Вы можете легко написать скрипт для этого, но в документации GML этот метод используется для инициализации массивов. Приведенный ими пример инициализирует массив из 10 записей (0-9) с нулями.

var i;
i = 9;
repeat(10)
   {
   array[i] = 0;
   i -= 1;
   }

Если вы хотите разные значения для каждой записи, вам придется вручную вводить каждую позицию. Это пример, который дали документы.

count = 3;
array[count] = "you?"
count -= 1;
array[count] = "are "
count -= 1;
array[count] = "How "
count -= 1;
array[count] = "Hello!"
count -= 1;

Относительно скрипта: вот простой для одномерных массивов. Используется как var myArray = array(record 1, record 2, 3, 4, ...)

///array(*args);
var arr;
for (var i=0;i<argument_count;i+=1)
{
    arr[i] = argument[i];
}
return arr;
...