XGM Forum
Сайт - Статьи - Проекты - Ресурсы - Блоги

Форуме в режиме ТОЛЬКО ЧТЕНИЕ. Вы можете задать вопросы в Q/A на сайте, либо создать свой проект или ресурс.
Вернуться   XGM Forum > Warcraft> Академия: форум для вопросов> Jass
Ник
Пароль
Войти через VK в один клик
Сайт использует только имя.

Ответ
 
FKoFF
Venomancer 89lvl. Europe
offline
Опыт: 5,975
Активность:
Толи я чего то попутал, то ли GetUnitZ, проблема с формулой
То ли слишком хочу спать, то ли где то косяк.
Очень уж захотелось сделать так что бы мисслы не летели всегда на одной высоте. По этому написал следующую функцию. Естественно вызов к ней через таймеры, ну да не суть.
Читаем функцию, после опишу ошибку.
function MoveUnit takes nothing returns nothing
local timer t = GetExpiredTimer()
local real spd = LoadReal(udg_Data,GetHandleId(t),1)
local real ang = LoadReal(udg_Data,GetHandleId(t),2)
local unit u = LoadUnitHandle(udg_Data,GetHandleId(t),0)
local real x = GetUnitX(u)
local real y = GetUnitY(u)
local location p = Location(x, y)
local real z = GetLocationZ(p)
local real OldZ = LoadReal(udg_Data,GetHandleId(t), 3)

if ( z > (OldZ+60) ) then
call RemoveUnit(u)
else
set z = (z + (OldZ - z))
endif


set p = PolarOffset(p, spd, ang) 
set x = GetLocationX(p)
set y = GetLocationY(p)
call SetUnitPositionLoc(u, p)
call SetUnitFlyHeightBJ( u, (GetUnitFlyHeightBJ(u) + z ), 0.01 )
call RemoveLocation(p)
set x = 0
set y = 0
set u = null
set spd = 0
set ang = 0
call FlushChildHashtable(udg_Data,GetHandleId(t))
call DestroyTimer(t)
set t = null
endfunction
Параметр OldZ задается при первом срабатывании функции, которая на таймеры вешает хендл юнита, угол, скорость движения.
Если я ничего не путаю на сонную голову то

if ( z > (OldZ+60) ) then
call RemoveUnit(u)
else
set z = (z + (OldZ - z))
endif
эта функция должна уничтожать летящий объект если текущий "z" больше стартового аж на 60 ед. и выше. Однако стоя на самой высокой поверхности тестовой карты - далее чем на одно срабатывание функции объект лететь не хочет, хотя из самой глубокой дыры - кастуется и летит до ближайшего холма.
call SaveReal(udg_Data, GetHandleId(t[1]), 3, (GetLocationZ(p)+30))
Так выглядит функция записи OldZ, если это чему-либо поможет.
Старый 09.11.2010, 06:54
Ответ

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы можете скачивать файлы

BB-коды Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход



Часовой пояс GMT +3, время: 13:49.