Образцы объектов

В игре основными представителями являются образцы различных объектов. В течение запуска игры Вы можете изменить множество аспектов этих образцов. Также Вы можете создать новые образцы объекта и их уничтожить. Кроме перемещения, связанных с переменными, обсуждаемых выше - будет рассмотрено рисование, связанное с переменными, которые будут обсуждаться ниже. Каждый образец объекта имеет следующие переменные:

object_index* Идентификатор объекта, которому принадлежит текущий образец. Эта переменная не может быть изменена.
id* Уникальный идентификационный номер текущего образца объекта (больше 100000). При создании образцов объектов в комнатах вы можете увидеть id образца объекта, если наведёте на него курсор.)
mask_index Идентификатор спрайта, который используется в качестве маски для столкновений для текущего образца объекта. Значение -1 устанавливается в качестве маски текущего спрайта для заданного объекта.
solid Отражает, является ли текущий образец объекта твёрдым. Это может быть изменено в течение игры.
persistent Отражает, является ли текущий образец объекта постоянным, и будет ли он появляться при переходе в другую комнату. Вы часто можете захотеть выключить "постоянность" в определённых моментах. (Например, когда Вы возвращаетесь в первую комнату.)

Есть одна проблема при работе с образцами объекта. Идентифицировать индивидуальные образцы объекта не так уж легко. У них нет имени. Когда есть только один образец конкретного объекта, то Вы можете использовать имя объекта, но в противном случае, Вам нужно будет получить идентификатор образца. Вы можете использовать его в операторе with и как объектный идентификатор. К счастью, существует множество переменных и функций, которые помогут Вам разместить образцы объекта.

instance_count* Содержит общее количество образцов в текущей комнате.
instance_id[0..n-1]* Содержит идентификатор конкретного образца объекта. Где n является номером образца.

Позвольте, чтобы я пояснил Вам образец объекта. Предположим, каждое устройство в Вашей игре имеет определённую мощность, и Вы хотите расположить самое мощное устройство, то Вы можете использовать следующие коды:

{
  maxid = -1;
  maxpower = 0;
  for (i=0; i<instance_count; i+=1)
  {
    iii = instance_id[i];
    if (iii.object_index == unit)
    {
      if (iii.power > maxpower)
        {maxid = iii; maxpower = iii.power;}
    }
  }
}

После того, как цикл maxid будет содержать идентификатор устройства с самой большой мощностью. (Не уничтожайте образцы объекта в течение такого цикла, поскольку они автоматически будут удалены из массива, и в результате начнут пропускаться образцы объекта.)

instance_find(obj,n) Возвращает идентификатор образца объекта obj за номером (n+1). Если он не существует, то возвращается специальный объект noone. Отметьте, что назначение образцов к своим идентификаторам изменяется каждый шаг, так что Вы не можете использовать переменные из предшествующих шагов.
instance_exists(obj) Возвращает (истина), если образец объекта obj существует. obj может быть объектом, идентификатором образца или всеми сразу.
instance_number(obj) Возвращает количество образцов объекта obj. obj может быть объектом, идентификатором образца или всеми сразу.
instance_position(x,y,obj) Возвращает идентификатор образца объекта obj, находящегося в точке (x,y). Если в указанной точке находятся несколько образцов объекта obj, то функция возвращает идентификатор первого образца. obj может быть объектом, идентификатором образца или всеми сразу. Если он не существует, то возвращается специальный объект noone.
instance_nearest(x,y,obj) Возвращает идентификатор ближайшего к точке (x,y) образца объекта obj. obj может быть объектом, идентификатором образца или всеми сразу.
instance_furthest(x,y,obj) Возвращает идентификатор наиболее отдалённого от точки (x,y) образца объекта obj. obj может быть объектом, идентификатором образца или всеми сразу.
instance_place(x,y,obj) Возвращает идентификатор образца объекта obj, который встретится, если текущий образец поместить в точку с координатами (x,y). obj может быть объектом, идентификатором образца или всеми сразу. Если он не существует, то возвращается специальный объект noone.

Следующие функции могут быть использованы для создания и разрушения образцов объекта.

instance_create(x,y,obj) Создаёт образец объекта obj в точке, с координатами (x,y). Функция возвращает идентификатор созданного образца.
instance_copy(performevent) Создаёт копию текущего образца. performent показывает, следует ли исполнять для полученной копии событие создания. Функция возвращает идентификатор копии образца.
instance_destroy() Уничтожает текущий образец объекта.
instance_change(obj,perf) Заменяет текущий образец объекта на образец объекта obj. Переменная perf показывает, выполнять ли события уничтожения и создания.
position_destroy(x,y) Уничтожает все образцы, спрайты которых находятся в точке (x,y).
position_change(x,y,obj,perf) Заменяет все образцы (находящиеся в точке x,y) образцами объекта obj. Переменная perf показывает, выполнять ли события уничтожения и создания.