Не могу разобраться с углом. Не толкает юнита вперед.
function KBT takes nothing returns nothing
local timer t = GetExpiredTimer()
local integer id = GetHandleId(t)
local unit u = LoadUnitHandle(Hash,id,0)
local real x0 = LoadReal(Hash,id,1)
local real y0 = LoadReal(Hash,id,2)
local real x1 = GetUnitX(u)
local real y1 = GetUnitY(u)
local real s = LoadReal(Hash,id,3)
local real d = LoadReal(Hash,id,4)
local string st = LoadStr(Hash,id,5)
local real cd = LoadReal(Hash,id,6)
local real a = Atan2(y0-y1,x0-x1)
local real x = x1 + s * Cos(a)
local real y = y1 + s * Sin(a)
if cd >= d then
call FlushChildHashtable(Hash,id)
call PauseTimer(t)
call DestroyTimer(t)
else
call SetUnitX(u,x)
call SetUnitY(u,y)
call DestroyEffect(AddSpecialEffect(st,x,y))
endif
call SaveReal(Hash,id,6,cd + s)
set t = null
set u = null
endfunction
function KB takes unit u, real s, real d, string st returns nothing
local timer t = CreateTimer()
local integer id = GetHandleId(t)
call SaveUnitHandle(Hash,id,0,u)
call SaveReal(Hash,id,1,GetUnitX(u))
call SaveReal(Hash,id,2,GetUnitY(u))
call SaveReal(Hash,id,3,s)
call SaveReal(Hash,id,4,d)
call SaveStr(Hash,id,5,st)
call SaveReal(Hash,id,6,0)
call TimerStart(t,0.04,true,function KBT)
set t = null
endfunction
Принятый ответ
нафига тут вообще угол?
вот функция перемещения в направлении точки
вот функция перемещения в направлении точки
void moveTo(unit u, float targetX, float targetY, float distance){
float x=GetUnitX(u);
float y=GetUnitY(u);
float dx=targetX-x;
float dy=targetY-y;
float r=SquareRoot(dx*dx+dy*dy);
float cos=dx/r;
float sin=dy/r;
SetUnitX(u, x+cos*distance);
SetUnitY(u, y+sin*distance);
}
вызывается примерно так
moveTo(u, x1, y1, s);
где u - юнит которого двигаем
x1, y1 - координаты точки в направлении которых двигаем
s - расстояние на которое двигаем
x1, y1 - координаты точки в направлении которых двигаем
s - расстояние на которое двигаем
`
ОЖИДАНИЕ РЕКЛАМЫ...
Чтобы оставить комментарий, пожалуйста, войдите на сайт.
Отредактирован nvc123
вот функция перемещения в направлении точки
x1, y1 - координаты точки в направлении которых двигаем
s - расстояние на которое двигаем
Отредактирован MpW
nvc123, в вашем коде float distance можно убрать, ничего не делает =(
Отредактирован Msey
Steal nerves, скорее всего второй вариант. ну тут спорно, на самом деле. вот успеет юнит посмотреть чуть вбок и по кривой поедет
Msey,
Atan2 в радианах возвращает же