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

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

Закрытая тема
 
freest

offline
Опыт: 442
Активность:
Неправильно высчитывается угол.
В общем, делаю абилу на подобии стрелы Windrunner в доте. Летит в направлении точки каста, ну и тд.
Вот только угол от кастера до точки каста высчитывается криво, и дамми летит под рандомным углом ;[
И еще 1 вопрос, как можно отслеживать расстояние, которое пролетел юнит (SetUnitPosition).
((код jass
function ini_cond takes nothing returns boolean
return GetSpellAbilityId() == 'A00B'
endfunction
function ini_cd takes nothing returns nothing
local integer i = GetHandleId(GetExpiredTimer())
local unit d = LoadUnitHandle(udg_h, i, 0)
local real a = LoadReal(udg_h, i, 1)
local real x = GetUnitX(d) + 20.00 * Cos(a)
local real y = GetUnitY(d) + 20.00 * Sin(a)
call SetUnitPosition(d, x, y)
set d = null
endfunction
function ini_acti takes nothing returns nothing
local timer t = CreateTimer()
local unit c = GetTriggerUnit()
local real cx = GetUnitX(c)
local real cy = GetUnitY(c)
local real tx = GetLocationX(GetSpellTargetLoc())
local real ty = GetLocationY(GetSpellTargetLoc())
set udg_h=InitHashtable()
call SaveUnitHandle(udg_h, GetHandleId(t), 0, CreateUnit(GetOwningPlayer(c), 'h003',cx , cy, 0 ))
call SaveReal(udg_h, GetHandleId(t), 1, bj_RADTODEG*Atan2(ty-cy,tx-cx))
call TimerStart(t, 0.03125, true, function ini_cd)
endfunction
function InitTrig_ini takes nothing returns nothing
local trigger t = CreateTrigger()
call TriggerRegisterAnyUnitEventBJ(t, EVENT_PLAYER_UNIT_SPELL_CAST)
call TriggerAddCondition(t, Condition(function ini_cond))
call TriggerAddAction(t, function ini_acti)
endfunction
))

Отредактировано freest, 01.02.2012 в 15:48.
Старый 01.02.2012, 15:43
Master_chan
Полуночный командир
offline
Опыт: 15,660
Активность:
Записываешь угол в градусах:
    call SaveReal(udg_h, GetHandleId(t), 1, bj_RADTODEG*Atan2(ty-cy,tx-cx))
а двигаешь в радианах:
    local real x = GetUnitX(d) + 20.00 * Cos(a)
    local real y = GetUnitY(d) + 20.00 * Sin(a)
Старый 01.02.2012, 15:49
freest

offline
Опыт: 442
Активность:
Master_chan, поправил спасибо.
Старый 01.02.2012, 15:55
Закрытая тема

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

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

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

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



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