Добавлен rsfghd,
опубликован
без понятия как назвать эту ерунду
в общем, если ты тут, то наверняка знаешь что делает эта функция
в общем, если ты тут, то наверняка знаешь что делает эта функция
function PolarProjectionXYZ(x, y, z, dist, GroundAngle, FacingAngle)
--FacingAngle - 0-360 -- yaw
--GroundAngle - 0-180 -- pitch
local x1 = x + dist*SinBJ(GroundAngle)*CosBJ(FacingAngle)
local y1 = y + dist*SinBJ(GroundAngle)*SinBJ(FacingAngle)
local z1 = z + dist*CosBJ(GroundAngle)
--
return x1,y1,z1
end
если двигать по поляркам то будет красиво, да, но а если подключить высоту? например движение по дуге? выйдет примерно так:
да, тоже прикольно, но не в этом дело, движение строго вертикальное, под 90 градусов, и как крутить эти градусы мне было вообще непонятно, и тут мне помог великий человек, Vlod, без него я бы забил на эту идею
он мне скинул следующую карту:
он мне скинул следующую карту:
с таким вот кодом
globals
real time = 9
real ptime = 0.03125
real dist = 150 // расстояние от центра оси
real height = 0
real agl = 0
real dagl = ((bj_PI*2)*5*ptime)/time // 5 оборотов за все время
real dz = 300*ptime/time // на 300 вверх (после поворота вперед) за все время
unit u = null
integer tick = R2I(time/ptime)
endglobals
function update takes nothing returns nothing
local real x
local real y
local real z
local real tagl = bj_PI*0.25 // угол между oz и ox - 45g
local real angle = bj_PI*0.5 // угол между ox и oy - 90g
local real rds
local real tmp
set agl = agl + dagl // вращение вокруг центра
set height = height + dz // движение вверх
// получение стартовых позиций x y z
set x = 0 + dist*Cos(agl)
set y = 0 + dist*Sin(agl)
set z = height
// поворот по оси zx
set tmp = x
set x = x*Cos(tagl) + z*Sin(tagl)
set z = -tmp*Sin(tagl) + z*Cos(tagl)
// поворот по оси xy
set tmp = x
set x = x*Cos(angle) - y*Sin(angle)
set y = tmp*Sin(angle) + y*Cos(angle)
call SetUnitX(u, x)
call SetUnitY(u, y)
call SetUnitFlyHeight(u, z, 0)
set tick = tick - 1
if tick <= 0 then
call PauseTimer(GetExpiredTimer())
endif
endfunction
function Trig_init2_Actions takes nothing returns nothing
call TriggerSleepAction(0)
set u = CreateUnit(Player(0), 'hfoo', 0, dist, 0)
call TimerStart(CreateTimer(), ptime, true, function update)
endfunction
//===========================================================================
function InitTrig_init2 takes nothing returns nothing
set gg_trg_init2 = CreateTrigger( )
call TriggerAddAction( gg_trg_init2, function Trig_init2_Actions )
endfunction
думаю излишне говорить, что мне успешно удалось сделать красивое движение по моей задумке:
можно намного интереснее движения делать, если пофантазировать, у меня даже получались, но к сожалению их контролировать я не мог, вот примеры:
само движение по дуге я брал отсюда: xgm.guru/p/blog-rsfghd/dvizhenie-po-beze-MKA
к нему просто прикрепил то, что скинул мне человек, благодаря которому эта страница вообще появилась
к нему просто прикрепил то, что скинул мне человек, благодаря которому эта страница вообще появилась
`
ОЖИДАНИЕ РЕКЛАМЫ...
Комментарии пока отсутcтвуют.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.