Перемещение вокруг

Очевидно, важным аспектом игры является перемещение вокруг образцов объекта. Каждый образец объекта имеет две встроенных переменных x и y, которые указывают позицию этого образца. (Точнее, они указывают место, где установлена начальная позиция спрайта.) Позиция (0,0) является левым верхним углом комнаты. Вы можете изменить позицию образца объекта, изменив переменные x и y. Если Вы хотите сделать движения объекта более комбинированными, то это верный путь. Вы обычно будете помещать этот код в событие шага для объекта.

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

Существует другой путь для определения движения, используя направление (в градусах 0-359) и скорость (не должна быть отрицательной). Вы можете устанавливать и считывать эти переменные, чтобы определить произвольное движение. (Непосредственно это изменяет величины для hspeed и vspeed.) Также имеются: сила трения, сила тяжести и направление действия силы тяжести. Наконец, имеется функция motion_add(dir,speed), чтобы добавлять движение к текущему образцу объекта.

Для полного комплекта, каждый образец объекта имеет следующие переменные и функции, имеющие отношение со своими позицией и движением:

x Отражает координату образца объекта по оси X.
y Отражает координату образца объекта по оси Y.
xprevious Отражает координату образца объекта по оси X.
yprevious Отражает предыдущую координату образца объекта по оси Y.
xstart Отражает координату по оси X в текущей комнате.
ystart Отражает координату по оси Y в текущей комнате.
hspeed Отражает величину скорости перемещения образца объекта по горизонтали.
vspeed Отражает величину скорости перемещения образца объекта по вертикали.
direction Отражает текущее направление образца объекта (от 0 до 360 градусов, отсчёт ведётся против часовой стрелки, 0 - направо).
speed Отражает текущую скорость образца объекта (пикселей за шаг).
friction Отражает текущее трение образца объекта (пикселей за шаг).
gravity Отражает силу гравитации для текущего образца объекта (пикселей за шаг).
gravity_direction Отражает направление гравитации для текущего образца объекта (270 - вниз).
motion_set(dir,speed) Заставляет текущий образец объекта двигаться в направлении dir со скоростью speed.
motion_add(dir,speed) "Векторно" добавляет движение со скоростью speed и направлением dir к текущему движению образца объекта.

Доступно также много функций, которые помогут Вам в определении заданных Вами движений:

place_free(x,y) Возвращает, если с образцом объекта, помещенным в точку с координатами (x,y), не происходит столкновений с твёрдыми объектами. Обычно данная функция используется для проверки перед непосредственным перемещением образца объекта в позицию с координатами (x,y).
place_empty(x,y) Возвращает, если с образцом объекта, помещённым в точку с координатами (x,y) не происходит вообще никаких столкновений.
place_meeting(x,y,obj) Возвращает, если при помещении текущего образца объекта в точку с координатами (x,y) происходит столкновение оного с образцом объекта obj. Это также может быть идентификатор образца, специальное слово всех значений образцов любого объекта, или специальное слово других образцов.
place_snapped(hsnap,vsnap) Возвращает, если текущий образец объекта находится в ячейке сетки, расчерченной с самого начала комнаты, вертикальные линии которой проведены через vsnap пикселей, а горизонтальные через hsnap пикселей.
move_random(hsnap,vsnap) Перемещает текущий образец объекта в произвольную свободную ячейку сетки текущей комнаты.
move_snap(hsnap,vsnap) Перемещает текущий образец объекта в ближайшую ячейку сетки текущей комнаты.
move_wrap(hor,vert,margin) Заворачивает образец объекта, когда он покидает комнату перемещаясь на другую сторону. hor - указывает заворачивание по горизонтали и vert - указывает заворачивание по вертикали. margin - указывает, как значительно начальный образец должен быть за пределами комнаты, когда случается заворачивание. Итак, это - область вокруг комнаты. Вы обычно используете эту функцию в событии Outside (Внешняя сторона).
move_towards_point(x,y,sp) Заставляет текущий образец объекта двигаться по направлению к точке с координатами (x,y) со скоростью sp.
move_bounce_solid(adv) Проверяет, если adv - истина, то текущий образец объекта будет рикошетить от образцов твёрдых объектов.
move_bounce_all(adv) Проверяет, если adv - истина, то текущий образец объекта будет рикошетить от образцов всех объектов.
move_contact_solid(dir,maxdist) Заставляет образец объекта двигаться в направлении dir до тех пор, пока текущий образец объекта не столкнётся с образцом твёрдого объекта. Аргумент maxdist содержит максимальную дистанцию (в пикселях), которую следует пройти образцу объекта. То есть, если образец объекта проходит максимальную дистанцию не встречая образцов твёрдых объектов, то он всё равно остановится. Если вы хотите, чтобы образец объекта всё же двигался до столкновения, независимо от размера пройденного пути, присвойте maxdist значение -1 (для произвольного расстояния используйте отрицательные значения).
move_contact_all(dir,maxdist) То же самое, что и предыдущая функция с тем отличием, что образец объекта будет двигаться, пока не столкнётся с образцом любого объекта.
move_outside_solid(dir,maxdist) Заставляет образец объекта двигаться в указанном направлении dir до тех пор, пока текущий образец объекта соприкасается с образцом твёрдого объекта. Если при создании образца объекта "соприкосновения" не происходит, то образец остаётся на месте. Аргумент maxdist содержит расстояние (в пикселях), которое образец объекта должен пройти для произвольного расстояния используйте отрицательные значения).
move_outside_all(dir,maxdist) То же самое, что и предыдущая процедура с тем отличием, что образец объекта будет двигаться, пока происходит "соприкосновение" с образцом любого объекта.
distance_to_point(x,y) Возвращает длину дистанции от точки с координатами текущего образца объекта до точки с координатами (x,y).
distance_to_object(obj) Возвращает длину дистанции от точки с координатами текущего образца объекта до ближайшего образца объекта obj.
position_empty(x,y) Возвращает, если в точке с координатами (x,y) ничего не находится.
position_meeting(x,y,obj) Возвращает, если в точке с координатами (x,y) находится образец объекта obj. obj может быть объектом, идентификатором образца объекта или одним из ключевых слов: self, other, или all.