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

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

Ответ
 
Чебурашка

offline
Опыт: 5,460
Активность:
Не получается движение
Делаю простенький спелл: волну которая бы отталкивала юнитов на своем пути. И никак не получается разобраться с углами. По задумке волна откидывает в сторону и чуть вперед. Но почему-то она откидывает так как надо только в одну сторону. Я не понимаю, как посчитать углы?
Код: ну создаетя таймер, которые каждые 0.1 секунд выполняет вот это:
local timer t = GetExpiredTimer()
local integer n = LoadInteger(udg_MainHashe,GetHandleId(t),StringHash("counter"))
local real x = LoadReal(udg_MainHashe,GetHandleId(t),StringHash("mindX"))
local real y = LoadReal(udg_MainHashe,GetHandleId(t),StringHash("mindY"))
local real a = LoadReal(udg_MainHashe,GetHandleId(t),StringHash("mindangle"))
local real x2 = x+(n+1)*20*Cos(a)
local real y2 = y+(n+1)*20*Sin(a)
local real b = 0
local real x3 = 0
local real y3 = 0
local group g = null
call GroupEnumUnitsInRange(g,x2,y2,200,Condition(function PowerWaveCheck))
set u = FirstOfGroup(g)
if u!=null then
loop
exitwhen u==null
set u = FirstOfGroup(g)
set b = AngleBetweenCoord2(GetUnitX(u),GetUnitY(u),x2,y2) а вот тут нужно задать угол, по которому перемещаю юнита. Пробовал много вариантов
set x3 = GetUnitX(u)+40*Cos(b)
set y3 = GetUnitY(u)+40*Sin(b)
call SetUnitPosition(u,x3,y3)
set n = n+1
call SaveInteger(udg_MainHashe,GetHandleId(t),StringHash("counter"),n)

Отредактировано Чебурашка, 15.09.2010 в 18:11.
Старый 15.09.2010, 18:03
Rampage
Бицепс
offline
Опыт: 9,722
Активность:
тут Atan2() нужно.
Старый 15.09.2010, 18:12
Чебурашка

offline
Опыт: 5,460
Активность:
Rampage:
тут Atan2() нужно.
Где именно?
Старый 15.09.2010, 18:13
Rampage
Бицепс
offline
Опыт: 9,722
Активность:
Чтобы высчитать углы X,Y в радианах, используй функцию Atan2. Или тебе формула конкретно нужна?
Старый 15.09.2010, 18:14
WiBk
Ленюсь...
offline
Опыт: 1,371
Активность:
Разве у тебя тут "а" уже не нужный угол? =\
Старый 15.09.2010, 18:16
Чебурашка

offline
Опыт: 5,460
Активность:
Rampage:
Чтобы высчитать углы X,Y в радианах, используй функцию Atan2. Или тебе формула конкретно нужна?
А ты про это. Насчет этого не парься, есть там Atan2
function AngleBetweenCoord2 takes real x,real y,real x2,real y2 returns real
    return Atan2(y2 - y , x2 - x)
endfunction
Старый 15.09.2010, 18:17
Rampage
Бицепс
offline
Опыт: 9,722
Активность:
Хм. А при использовании спелла куда мобы летят?
Старый 15.09.2010, 18:17
Чебурашка

offline
Опыт: 5,460
Активность:
WiBk:
Разве у тебя тут "а" уже не нужный угол? =\
Это угол каста спелла, если делать по нему, то юнитов будет просто тащить вперед.
Старый 15.09.2010, 18:18
WiBk
Ленюсь...
offline
Опыт: 1,371
Активность:
Чебурашка, так у тебя высчитывается угол "b" по учету угла "а", тоесть по идее они одинаковые...
Старый 15.09.2010, 18:19
Чебурашка

offline
Опыт: 5,460
Активность:
Rampage:
Хм. А при использовании спелла куда мобы летят?
Должны: В сторону от вектора волны и чуть вперед
На деле: Чуть вперед и направо , без разницы под каким углом к ним кастуешь
Старый 15.09.2010, 18:19
WiBk
Ленюсь...
offline
Опыт: 1,371
Активность:
Чебурашка, а, все, я не так понял код. У тебя там должно быть Атан2(у2-GetUnitY(u),x2-GetUnitX(u))
Старый 15.09.2010, 18:22
Rampage
Бицепс
offline
Опыт: 9,722
Активность:
Я могу посчитать полностью и сделать, но мне не удобно с твоим. Могу попробовать заново сделать этот спелл.
Старый 15.09.2010, 18:24
Чебурашка

offline
Опыт: 5,460
Активность:
Rampage:
Я могу посчитать полностью и сделать, но мне не удобно с твоим. Могу попробовать заново сделать этот спелл.
Было бы прекрасно
Старый 15.09.2010, 18:25
WiBk
Ленюсь...
offline
Опыт: 1,371
Активность:
Чебурашка, у тебя вообще по идее юнита двигать не должно. о_о У тебя группа не создана
Старый 15.09.2010, 18:27
Rampage
Бицепс
offline
Опыт: 9,722
Активность:
Сейчас займусь. В EWIX арене есть такого плана спелл.
Rampage добавил:
Чото не катит...
Старый 15.09.2010, 18:57
Windrunner
Верь мне!
offline
Опыт: 4,565
Активность:
Чебурашка, эм...Они всегда отлетают вправо,потому что у тебя offset фиксирован.Делай его рандомным и радуйся жизни=)
Тоесть GetRandomReal(.00,180.00) или,как вариант,GetRandomReal(-90.00,90.00)(только не знаю,будет ли это пахать=)
Старый 15.09.2010, 19:00
Чебурашка

offline
Опыт: 5,460
Активность:
Windrunner:
Чебурашка, эм...Они всегда отлетают вправо,потому что у тебя offset фиксирован.Делай его рандомным и радуйся жизни=)
Тоесть GetRandomReal(.00,180.00) или,как вариант,GetRandomReal(-90.00,90.00)(только не знаю,будет ли это пахать=)
Что? А ничего что угол меняется?
И да, рандом мне не подходит
Старый 15.09.2010, 19:05
Rampage
Бицепс
offline
Опыт: 9,722
Активность:
Формула Atan2(TY-Y,TX-X) попробуй - тоесть TY - игрик(икс) пикнутого, а Y - игрик(икс) волны. Делай отталкивание маленьким, гдето 10 метров, и воаля - то что нужно. Чем меньше метров сделаешь толкания, тем меньше будет заметно что это обычная формула массового кнокбэка(допустим).
Rampage добавил:
И толкание производи создавая(пикая) новую группу каждый раз.
Старый 15.09.2010, 19:20
Чебурашка

offline
Опыт: 5,460
Активность:
WiBk:
Чебурашка, а, все, я не так понял код. У тебя там должно быть Атан2(у2-GetUnitY(u),x2-GetUnitX(u))
Хз почему, но это решило
Старый 15.09.2010, 19:23
Rampage
Бицепс
offline
Опыт: 9,722
Активность:
Это и есть то, о чём говорил тебе. От X и Y волны отнимаешь X и Y мобов. Или наоборот, не помню.
Старый 15.09.2010, 19:24
Ответ

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

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

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

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



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