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

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

Ответ
 
Vadik29
Choice Battle 1.6а
offline
Опыт: 15,845
Активность:
Вот финальная версия, я протестил, все работает. Выглядит как невидимая стена.
function HardLine takes unit A returns real
    real AC
    real AM
    real AD
    real KB
    real Kx
    real Ky
    real DO
    real BO
    real x = GetUnitX(A)
    real y = GetUnitY(A)
    real x1 = GetRectMaxX(gg_rct_GameZone)
    real x2 = GetRectMinX(gg_rct_GameZone)
    real y1 = GetRectMaxY(gg_rct_GameZone)
    real y2 = GetRectMinY(gg_rct_GameZone)
    real a = Atan2( -y, -x)
    if y > y1 then
        BO = y1
        DO = y
        AM = DO - BO
        AD = SR(x, y, y, 0)
        Kx = BO * Cos(a)
        Ky = BO * Sin(a)
        KB = SR(Kx, Ky, y1, 0)
    elseif x > x1
        BO = x1
        DO = x
        AM = DO - BO
        AD = SR(x, y, 0, x)
        Kx = BO * Cos(a)
        Ky = BO * Sin(a)
        KB = SR(Kx, Ky, 0, x1)
    elseif y < y2
        BO = y2
        DO = y
        AM = DO - BO
        AD = SR(x, y, y2, 0)
        Kx = BO * Cos(a)
        Ky = BO * Sin(a)
        KB = SR(Kx, Ky, y2, 0)
    elseif x < x2
        BO = x2
        DO = x
        AM = DO - BO
        AD = SR(x, y, 0, x2)
        Kx = BO * Cos(a)
        Ky = BO * Sin(a)
        KB = SR(Kx, Ky, 0, x2)
    endif

    AC = SquareRoot(AM * AM + AD - SquareRoot((KB * DO / BO) * (KB * DO / BO) - AM * AM))
    return AC
endfunction
Старый 19.09.2013, 13:29
Mark Mocherad
Не активен
offline
Опыт: 7,564
Активность:
я фигею математики ) и отткуда вы формулы взяли ?
п.с. я б до такого не додумалса.
Старый 19.09.2013, 13:57
влад10011

offline
Опыт: 2,337
Активность:
Можно сделать рект круглым и тогда можно сделать так:
Cоздаёшь вектор от центра ректа до дамика и вычитаешь длину вектора, равную длине вектора от центра до maxx and maxy(или min, без разницы. тк рект круглый).
Точка найдена.
влад10011 добавил:
и да,
Vadik29:
Нет, это как бы игровая площадь, а скилами, юниты могут вылетать в черную зону, эта функция препятствует этому реагируя на вылет.
просто можно сделать проверку и изменять координаты:
(min and max xy области игровой карты)
if(x<minx){x=minx}elseif(x>maxx){x=maxx}
if(y<miny){y=miny}elseif(y>maxy){y=maxy}
Старый 19.09.2013, 16:51
Hanabishi
COOL STATUS
offline
Опыт: отключен
Наркоманы ) Точка пересечения двух прямых же. Для каждой грани области своё условие.
Старый 19.09.2013, 21:18
HolyMoon
Hly shit!
offline
Опыт: 6,986
Активность:
влад10011:
Можно сделать рект круглым
влад10011:
рект круглый
Наркоманы
Старый 19.09.2013, 21:28
влад10011

offline
Опыт: 2,337
Активность:
О, да, я заядлый наркоман.
Если true то круглый rect,если false квадратный rect
[code]
rect CreateRectArea(real x,real y,real area,boolean b) {
if b==true then
return Rect(x-area,y-area,x+area,y+area)
else
return Rect(x-area,y+area,x+area,y-area)
endif
}
[/code]
Старый 20.09.2013, 15:59
Ответ

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

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

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

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



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