Адресация переменных в других образцах

Как описано выше, Вы можете устанавливать переменные в текущих инструкциях, используя подобный оператор

x = 3;

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

ball.speed = 0;

Это изменит скорость всех образцов объекта шарика. Существует множество специальных объектов "objects".

На примере, Вы можете использовать инструкции следующего вида:

other.sprite_index = sprite5;
all.speed = 0;
global.message = 'A good result';
global.x = ball.x;

Вы могли бы задаться вопросом, что же делает последнее присваивание, когда существует множество шариков. Что-ж - первое принимает значение x и назначает его глобальному значению.

Но если Вы хотите установить скорость одного определённого шарика, а не сразу всех шаров - сделать это немного сложнее. Каждый образец имеет уникальный идентификатор. Когда Вы помещаете образцы в редактор комнат, то данный идентификатор образца будет отображаться при наведении на образец курсора мыши. Он представляется в виде числа, которое больше или равно 100000. Это число Вы можете использовать дополнительно при размещении его слева от точки. Но будьте осторожны. Точка интерпретируется как десятичная точка в числе. Чтобы избежать путаницы, поместите по краям числа круглые скобки. Например: допустим идентификатор шарика имеет значение 100032, его Вы можете записать так:

(100032).speed = 0;

Когда Вы создаёте образец в программе, запрос возвращает идентификатор. Вот конкректная часть подпрограммы:

{
  nnn = instance_create(100,100,ball);
  nnn.speed = 8;
}

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

{
  obj[0] = ball;
  obj[1] = flag;
  obj[0].alarm[4] = 12;
  obj[1].id.x = 12;
}

Последняя инструкция должна читаться следующим образом. Мы берём идентификатор первого флага. Для образца с этим идентификатором мы устанавливаем x координату на 12.

Название объекта, специальные объекты и идентификаторы образца могут также использоваться во множестве функций. Они действительно рассмотрены в программах как константы.