Пути

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

Определение путей

Чтобы добавить путь в игру, выберите опцию Create Path из меню Resources. Откроется следующее окно (в приведённом примере уже добавлен небольшой путь).

В левой верхней части окна Вы можете присвоить рисуемому пути название. Чуть ниже Вы найдёте точки, которые и определяют путь. Каждая точка имеет определённую позицию и скорость (обозначенную как sp). Позиция не является абсолютной. Как будет сказано ниже, образец будет всегда начинать движение из исходного положения и уже от него двигаться по проложенном пути. Скорость должна интерпретироваться следующим образом. Значение 100 означает первоначальную скорость образца. Меньшее значение снижает скорость, большее значение - увеличивает её (таким образом, указывается процент от действительной скорости). Скорость будет интерполироваться между точками, поэтому переключение скорости будет происходить постепенно.

Для того чтобы добавить точку, нажмите кнопку Add. Теперь Вы можете указать фактическую позицию и скорость. Всякий раз, когда Вы выбираете точку в списке, Вы можете изменить её значения. Нажмите Insert, чтобы вставить новую точку перед текущей точкой. Delete, чтобы удалить текущую точку.

В правой части вложения Вы увидите фактический путь. Красная точка указывает к настоящему времени выбранную управляющую точку. Синие точки являются другими управляющими точками. Зелёный квадрат указывает позицию начала пути. Вы можете изменить путь, используя мышь. Щёлкните мышью в любом месте изображения, чтобы добавить точку. Щёлкните на существующей точке и перемещайте её, чтобы изменить позицию. Когда Вы удерживаете <Shift> при щелчке в точке, Вы включаете точку. Наконец, Вы можете использовать правую кнопку мыши для удаления точек. (Отметьте, что Вы не можете изменить скорость таким образом). Обычно точки будут подгоняться под сетку. Вы можете изменить установочные параметры сетки в верхней инструментальной панели. Здесь же Вы можете указать: должна ли сетка быть видимой или нет. Если Вы хотите точно позиционировать точку, удерживайте клавишу <Alt> при её добавлении либо перемещении.

Вы можете повлиять на форму пути двумя способами. Во-первых, Вы можете использовать тип соединения, определяя, должно ли соединение быть прямолинейным, либо плавным. Во-вторых, Вы можете указать, должен ли путь быть закрытым или нет.

В инструментальной панели имеется множество важных элементов управления. Слева направо они имеют следующие значения: первая кнопка указывает, что Вы готовы закрыть вложение, сохранив последние изменения. (Если Вы хотите закрыть окно без сохранения последних изменений - нажмите крестик в верхнем правом углу вложения). Затем имеется кнопка возврата недавних изменений.

Далее имеются следующие кнопки: кнопка полной очистки пути, кнопка обратного (реверсивного) направления по заданному пути, кнопка перемещения пути, кнопка горизонтального зеркала пути, кнопка вертикального перевёртывания пути, кнопка вращения пути и кнопка масштабирования пути. Затем имеются кнопки для сдвижения вида (не самого пути; фактическая область вида указывается в зоне статуса внизу) и для центрирования вида.

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

Назначение пути для объектов

Для того чтобы назначить путь для образца объекта, Вы можете установить действие пути в некотором событии, например в событии создания. В этом действии Вы должны определить путь, указанный ранее. Имеются также некоторые продвинутые величины, которые Вы можете употреблять.

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

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

Наконец, Вы можете указать, должен ли путь быть абсолютным или относительным. Абсолютный путь будет выполнен на том месте, где он определён. Образец объекта установленный в стартовой позиции, перемешается оттуда (конечная позиция, когда скорость является отрицательной). Это полезно, особенно когда у Вас, например, есть гоночная дорожка и путь на этой гоночной дорожке, который Вы определили. Когда Вы выбираете относительный путь, то образцы объекта начнут выполнять путь из своей текущей позиции. Это полезно, когда образец объекта должен сделать локальное движение. Например, космические корабли, как в играх наподобие космических рейнджеров, могут сделать конкретный поворот из их текущей позиции.

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

При использовании сценариев или частей кода, Вы получите больше возможностей для управления выполнением пути. Следующая функция запускает путь для образца объекта. Переменная path_position указывает текущую позицию в пути (между 0 и 1 как указано выше). Переменная path_speed указывает скорость вдоль пути. Переменная path_scale может быть использована для масштабирования пути. Значение 1 является оригинальным размером. Большее значение указывает, что путь будет больше; меньшее значение - что путь будет меньше. Переменная path_orientation указывает ориентацию, в которой путь будет выполнен (в градусах против часовой стрелки). Это позволяет Вам выполнить путь в другой ориентации (например, перемещаясь вверх и вниз, а не влево и вправо). Есть также переменная для управления конечным поведением. Наконец существует масса функций для запроса свойств путей (например, x и y координата в определённых позициях) и имеются функции для создания пути. Есть даже функции для создания столкновений свободных путей для образца, чтобы достичь определённой цели. Смотрите об этом последующие главы GML.

Вы могли бы спросить, что случается, когда образец объекта вступает в противоречие с другим образцом объекта, пока следует путь. В основном во многих случаях, когда образец перемещается с определённой скоростью. Когда есть твёрдый образец объекта, то он устанавливается обратно на своё предшествующее место. Когда оба образца объекта - не твёрдые тела, они устанавливаются в своих новых позициях Next (в событии столкновения(ий)) и выполняются, и будут проверяться независимо от того, должно ли быть столкновение. Если не так, и другой образец объекта является твёрдым, то он будет остановлен, так же как и должно было быть (предположим, что было определено событие столкновения). Также, переменная path_position не возрастает. Когда заблокированный образец исчезает, то образец продолжит следовать за своим путем. Чтобы оперировать сами столкновения используйте переменную path_positionprevious, которая может быть полезной. Это держит предшествующую позицию для пути, и Вы можете установить позицию пути в эту переменную, чтобы избежать продвижения вдоль пути.

Событие пути

Как описано выше, Вы можете указать, что должно произойти, когда образец достигает окончания пути. В этот момент происходит событие End of Path (Завершение Пути). Вы можете найти его в событиях Other. Здесь Вы можете разместить различные действия. Например, Вы можете уничтожить образец или позволить ему запускаться с нового (другого) пути.