Jass - это такая вещь, которая вызывает затруднения у многих начинающих картостроителей, но только с использованием
Jass можно создавать действительно эффектные
карты WC3, так что основы этой технологии знать нужно.
Все гораздо проще чем вы думаете. Допустим, что Вы имеете две точки A;B , зная их координаты. Как же узнать координаты некой точки С, которая находится на определенном расстоянии R от А в направлении B? Если Вам не очень ясно, то Вы можете на чистом листе бумаги нарисовать себе точки A;B , потом выберете какой-то отрезок R(длина его должны быть меньше чем AB). С - находится на пересечении отрезка (AB) и окружности, которая проведена из радиуса R в точку A. Думаю, что теперь хоть что-то стало яснее.
Зачем же нам вообще надо искать C? Допустим, что юнит-цель начал свое движение из точки А в точку В, а каждые 0.05 секунды мы должны узнать следующее положение юнита и передвинуть его на некое расстояние в направление точки В. Чтобы мы могли свободно узнавать положение точки С нам надо использовать полярные координаты.
Все знают, что такое обычные координаты. Их обычно задают с помощью X and Y. Есть и другие способы записи координат точки. Сделай координатные оси, а потом выбери некую точку А. Затем, соедини точку А с началом координат О. Допустим, что длина AO=r, а вот угол, образующий АО с началом координат - равен а. В этом случае полярные координаты будут заданы расстоянием точки до начала координaт и yглoм. Ты уже сам выберешь, как тебе задавать координаты X,Y или r,a.
War3 содержит в себе уже встроенные возможности для вычисления полярных координат. Запишем такое действие -
Set p = Point with polar [offset ((Center of (Playable map area)) offset by 256.00 towards 50.00 degrees)]
где p - переменная точка. Как только будет выполнено действие в точке p появится точка, которая будет получена из центра карты(!) )Center of (Playable map area)), а все это благодаря перемещению на расстояние 256 и под углом 50 градусов. Вообразили такое действие?
Данный тип координат ( полярные координаты ) довольно удобен в том случае, если тебе требуется создать некое движение по кругу или же по любой прямой. К примеру цикл -
For each (i) from 1 to 10, do (Actions)
Цикл Действия
Set p = ((Center of (Playable map area)) offset by i*100 towards 50.00 degrees)
<создать юнит в точке p>
Все это сделает то, что на расстоянии 100, 200... -1000 под углом 50, от центра карты будут созданы 10 юнитов.
For each (i) from 1 to 10, do (Actions)
Цикл Действия
Set p = ((Center of (Playable map area)) offset by 1000 towards 36*i degrees)
<создать юнит в точке p>
Если мы сделаем так, то будет создано тоже 10 юнитов, но они уже будет расположены на окружности радиуса = 1000. Первый юнит будет под 36 градусами, второй 36*2, а десятый 36*10...
Это есть полярные координаты точки.