Добавлен noyl
Как изменять скорость даммиков(сюрикены вокруг героя)?
set a[0] = Atan2(GetUnitY(dummy[0])-GetUnitY(dummy[1]),GetUnitX(dummy[0])-GetUnitX(dummy[1]))
set a[1] = Atan2(GetUnitY(dummy[1])-GetUnitY(dummy[2]),GetUnitX(dummy[1])-GetUnitX(dummy[2]))
set a[2] = Atan2(GetUnitY(dummy[2])-GetUnitY(dummy[0]),GetUnitX(dummy[2])-GetUnitX(dummy[0]))
loop
exitwhen i >= 3
call SetUnitX(dummy[i],GetUnitX(hero)+rad*Cos(a[i]))
call SetUnitY(dummy[i],GetUnitY(hero)+rad*Sin(a[i]))
set i = i + 1
endloopПринятый ответ
держи
код
function Trig_P takes nothing returns nothing
local integer i = 0
local real f
local real h = 360/udg_speed //кол-во вращении или промежутков
local real v = 1/h //частота (короче общее время)
set udg_speed = 360 * v * udg_C //угловая скорость
//у нас могут изменяться 3 коэффициента: скорость, время, и коэффициент-множитель. К сожалению, время не смог вставить, т.к. нужно тогда изменять время таймера.
set udg_A = ModuloReal(udg_A + udg_speed, 360) //угол вращения круга.
if (GetLocalPlayer()==Player(0)) then
// Use only local code (no net traffic) within this block to avoid desyncs.
call ClearTextMessages()
endif
call BJDebugMsg("угол вращения круга: " + R2S(udg_A))
call BJDebugMsg("угловая скорость speed: " + R2S(udg_speed) )
call BJDebugMsg("условное время t: " + R2S(v) + "; время таймера T: " + R2S(udg_T))
call BJDebugMsg("множитель speed: " + R2S(udg_C))
loop
exitwhen i >= udg_K
set f = udg_A + udg_B*i
call SetUnitX(udg_U[i],GetUnitX(udg_Hero)+ 400*CosBJ(f))
call SetUnitY(udg_U[i],GetUnitY(udg_Hero)+ 400*SinBJ(f))
set i = i + 1
endloop
endfunction
function Trig_Init_Actions takes nothing returns nothing
set udg_R = 400 //радиус
set udg_A = 30.00 //запоминалка. текущий угол круга. когда круг вращается, изменяется только этот угол. при создании даймиков запоминаем угол
set udg_speed = 15.00 //назовем это угловой скоростью. каждый тик таймера прибавляем 15 градусов. короче круг вместе с юнитами поворачивается на 15 град каждый тик
set udg_C = 1.00 //это множитель ускорения (100%). будет домножать на скорость
set udg_K = 3 //кол-во юнитов
set udg_B = ( 360.00 / udg_K ) //угловое расстояние между юнитами
set udg_TIMER = CreateTimer() //таймер
set udg_T = 0.03 //время таймера
set udg_Hero = gg_unit_Hpal_0000
set udg_U[0] = CreateUnit(Player(0),'hpea',GetUnitX(udg_Hero),GetUnitY(udg_Hero), 0)
set udg_U[1] = CreateUnit(Player(0),'hpea',GetUnitX(udg_Hero),GetUnitY(udg_Hero), 0)
set udg_U[2] = CreateUnit(Player(0),'hpea',GetUnitX(udg_Hero),GetUnitY(udg_Hero), 0)
call SetUnitX(udg_U[0],GetUnitX(udg_Hero)+udg_R*Cos(30*bj_DEGTORAD))
call SetUnitY(udg_U[0],GetUnitY(udg_Hero)+udg_R*Sin(30*bj_DEGTORAD))
call SetUnitX(udg_U[1],GetUnitX(udg_Hero)+udg_R*Cos(150*bj_DEGTORAD))
call SetUnitY(udg_U[1],GetUnitY(udg_Hero)+udg_R*Sin(150*bj_DEGTORAD))
call SetUnitX(udg_U[2],GetUnitX(udg_Hero)+udg_R*Cos(270*bj_DEGTORAD))
call SetUnitY(udg_U[2],GetUnitY(udg_Hero)+udg_R*Sin(270*bj_DEGTORAD))
call TimerStart(udg_TIMER, udg_T, true, function Trig_P)
endfunction
//===========================================================================
function InitTrig_Init takes nothing returns nothing
set gg_trg_Init = CreateTrigger( )
call TriggerAddAction( gg_trg_Init, function Trig_Init_Actions )
endfunction Загруженные файлы
`
ОЖИДАНИЕ РЕКЛАМЫ...
Чтобы оставить комментарий, пожалуйста, войдите на сайт.

WC3





Такая проблема, что они слишком быстро двигаются, меня это не устраивает.
Ред. biridius
каждые 0.03 увеличиваешь эту переменную на скорость поворота в градусах * 0.03, и перемещаешь юнита в
x = x героя + cos угла * радиус
y = y героя + sin угла * радиус
для больше одного даммика еще нужно добавлять к углу 360 градусов * номер даммика / число даммиков
Ред. noyl
Cos и Sin чего?
Ред. MpW