Никак не могу понять как заставить дамми юнитов с моделю эфекта кружится вокруг персонажа.

Принятый ответ

раскрыть
local unit u= //кастер
local real x1=GetUnitX(u) //координаты кастера
local real y1=GetUnitY(u)

local unit t= //дайми
local real x2=GetUnitX(t)
local real y2=GetUnitY(t)

//определение расстояния
local real dx=x2-x1 //разница между концом на началом координаты
local real dy=y2-y1
local real dist = SquareRoot(dx * dx + dy * dy) //расстояние, где SquareRoot - математический корень, dx * dx - это dx в степени 2

local real angle = Atan2(dy,dx) //текущий угол между двумя точками (юнитами) в градусах

//если вы хотите текущий угол изменить, то можно изменить angle прибавив или убавив значение на несколько градусов
set angle = angle + 30. //например прибавляешь 30 градусов

set x = x + dist * Cos(angle * bj_DEGTORAD)
set y = y + dist * Sin(angle * bj_DEGTORAD)
0
19
7 лет назад
0
Похожие вопросы:

ответ
Нужен ribbon emitter в модели.
ответ
они реализованы не через векторы, а через события с малым периодом времени
Для начала определись с терминами, у тебя получается, что периодическое событие заменяет векторы. Любое движение, это переодическое событие, векторы только удобный способ их записи.
ссылку на гайд для тупых
ответ
на сколько я понял снаряд является юнитом
тогда надо к юниту-снаряду атачить структуру-снаряд (через хеш/хендл/юзердата)
делаешь проверку у юнита цели на наличие рядом юнита-снаряда
если юнит-снаряд есть то берёшь приатаченный к нему экземпляр структуры-снаряда и меняешь в нём значение полей
короткий пример атача через юзердату
Missile a=Missile.new(); // создаёт снаряд и юнита для него
a.ms=200; // устанавливаем скорость на 200
SetUnitUserData(a.myUnit, a); // сохраняем в юзердату юнита a.myUnit экземпляр структуры a
...
...
Missile a=GetUnitUserData(u); // извлекаем экземпляр структуры из юзердаты юнита u
a.ms=100; // устанавливаем скорость на 100
подробнее есть в статьях xgm.guru/p/wc3/articles
читай всё что связано с ооп/атачи/хеш-таблицы
ответ
Нашёл решение для тебя.
Пол-ночи провозился, но нашёл. почему-то это стало делом чести - открыть сию карту в редакторе

В общем, берёшь архив из аттача и тупо суёшь папку UI в корень варкрафта. После этого карта будет открываться любым вариантом редактора - как JNGP (любым), так и (даже!) стандартным.
Важно: локальные файлы должны быть разрешены.

Только там такой срач и дичь, что лучше реально своими руками с нуля писать...

0
30
7 лет назад
Отредактирован Clamp
0
Полярные координаты, основы тригонометрии или линейной алгебры (вектора) в помощь.
0
23
7 лет назад
0
Clamp, ладно допустим я чайник.
1
27
7 лет назад
Отредактирован MpW
1
раскрыть
local unit u= //кастер
local real x1=GetUnitX(u) //координаты кастера
local real y1=GetUnitY(u)

local unit t= //дайми
local real x2=GetUnitX(t)
local real y2=GetUnitY(t)

//определение расстояния
local real dx=x2-x1 //разница между концом на началом координаты
local real dy=y2-y1
local real dist = SquareRoot(dx * dx + dy * dy) //расстояние, где SquareRoot - математический корень, dx * dx - это dx в степени 2

local real angle = Atan2(dy,dx) //текущий угол между двумя точками (юнитами) в градусах

//если вы хотите текущий угол изменить, то можно изменить angle прибавив или убавив значение на несколько градусов
set angle = angle + 30. //например прибавляешь 30 градусов

set x = x + dist * Cos(angle * bj_DEGTORAD)
set y = y + dist * Sin(angle * bj_DEGTORAD)
Принятый ответ
0
20
7 лет назад
0
Меняешь угол в радианах с течением времени. По этому углу делаешь отступ от координат юнита (N*cos(angle)) - смещение по ОХ. По ОY использовать синус. N - расстояние от юнита, на котором летает ваш объект.
#del
0
27
7 лет назад
Отредактирован MpW
0
я там выше с кодом немного ошибся
set x = x + dist * Cos(angle * bj_DEGTORAD)
set y = y + dist * Sin(angle * bj_DEGTORAD)
нужно вместо dist вставить на сколько ты смещаешь, короче вместо dist на speed. Можно вообще не писать dist или speed, если движение по спирали
еще не помню, atan2 возвращает в градусах или в радианах.
Если что xgm.guru/p/100/193756?postid=355523#comment1
Чтобы оставить комментарий, пожалуйста, войдите на сайт.