Добавлен 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
Загруженные файлы
`
ОЖИДАНИЕ РЕКЛАМЫ...
Чтобы оставить комментарий, пожалуйста, войдите на сайт.
Такая проблема, что они слишком быстро двигаются, меня это не устраивает.
Отредактирован biridius
каждые 0.03 увеличиваешь эту переменную на скорость поворота в градусах * 0.03, и перемещаешь юнита в
x = x героя + cos угла * радиус
y = y героя + sin угла * радиус
для больше одного даммика еще нужно добавлять к углу 360 градусов * номер даммика / число даммиков
Отредактирован noyl
Cos и Sin чего?
Отредактирован MpW