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

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

Закрытая тема
 
Cosonic5
Моймозггоритогнем
offline
Опыт: 13,584
Активность:
Вообщем нужна помощь и пример с движением дамми
Ребят нужна несложная система передвижения дамми через координаты, если есть у каго пример скиньте буду благодарен.
Старый 24.04.2012, 09:19
Klop
Папа римский
offline
Опыт: 13,006
Активность:
какая система
real x = GetUnitX(u)
real y = GetUnitY(u)
real angle = Atan2(GetSpellTargetY() - y, GetSpellTargetX() - x)
real Dist = 25.
real newX = x+Cos(angle)*Dist
real newY = y+Sin(angle)*Dist
SetUnitPosition(u,newX,newY)
вот и вся система определил угол в радианах между точками,формулой арктангнса
конечная координата - начальная координата и отношение Y к Х
затем двигаешь,движение x + Дистанция на которую двигаешь * Cos(Угол в радианах между точками),аналогично с Y только там через Sin
SetUnitPosition сбивает приказы
SetUnitX(Y) не сбивают двигай как удобней это в таймере
Старый 24.04.2012, 09:36
DaeDR

offline
Опыт: 8,074
Активность:
Посмотри вот это
DaeDR добавил:
» code
library MoveUnit

    globals
    private timer array Timer
    private unit array Unit
    private integer array Nost
    private real array dist
    private real array angle
    private integer N = 0
    endglobals
    
        // пример //
    // angle = bj_RADTODEG * Atan2(GetUnitY(GetSpellTargetUnit()) - GetUnitY(GetTriggerUnit()), GetUnitX(GetSpellTargetUnit()) - GetUnitX(GetTriggerUnit()))
    // call MoveUnit ( GetSpellTargetUnit(), angle, 1500.0, 800.0 ) - применяемая функция
    // дальность 1500, скорость 800
    
private function MoveUnit_Timer takes nothing returns nothing
    local real x
    local real y
    local integer i = 1
    whilenot (GetExpiredTimer()==Timer[i])or(i>N) { i++ }
    set x = GetUnitX(Unit[i]) + dist[i] * Cos(angle[i] * bj_DEGTORAD)
    set y = GetUnitY(Unit[i]) + dist[i] * Sin(angle[i] * bj_DEGTORAD)
    call SetUnitPosition ( Unit[i], x, y )
    if Nost[i] == 0 then
        call DestroyTimer (Timer[i])
        set Timer[i] = Timer[N]
        set Unit[i] = Unit[N]
        set Nost[i] = Nost[N]
        set dist[i] = dist[N]
        set angle[i] = angle[N]
        set Timer[N] = null
        set Unit[N] = null
        set Nost[N] = 0
        set dist[N] = 0.
        set angle[N] = 0.
        N--
    else
        Nost[i]--
    endif
endfunction

function MoveUnit takes unit u, real a, real distancion, real speed returns nothing
    N++
    set Timer[N] = CreateTimer ()
    set Unit[N] = u
    set Nost[N] = R2I(distancion/speed*33)
    set dist[N] = distancion/Nost[N]
    set angle[N] = a
    call TimerStart ( Timer[N], 0.03, true, function MoveUnit_Timer )
endfunction
    
endlibrary
Старый 24.04.2012, 09:40
Cosonic5
Моймозггоритогнем
offline
Опыт: 13,584
Активность:
Klop, DaeDR, спс ребят! (пошел пробовать)
Старый 24.04.2012, 10:06
ScorpioT1000
Работаем
offline
Опыт: отключен
вот тут все максимально просто и по трём осям
Старый 24.04.2012, 10:29
Закрытая тема

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

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

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

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



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