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

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

Ответ
 
Vadik29
Choice Battle 1.6а
offline
Опыт: 15,845
Активность:
Области. Крайние точки.
Собственно весь вопрос на картинке. Положение этой точки может быть всегда разным, но она всегда крайняя.
Миниатюры
Кликните на картинку для увеличения
Название:  Вопрос.jpg
Просмотров: 42
Размер:  59.9 Кбайт  
Старый 19.09.2013, 10:49
Melissa
Я всегда хочу как лучше!
offline
Опыт: 31,696
Активность:
Первое, что приходит в голову - создать даммик на позиции юнита лицом к области и двигать его по чуть чуть, пока не будет выполняться "область содержит юнит".
NatureKid добавил:
или область содержит точку - лучше
Старый 19.09.2013, 10:53
Vadik29
Choice Battle 1.6а
offline
Опыт: 15,845
Активность:
NatureKid, была такая мысль, но это крайний случай. Лучше найти др. вариант.
Старый 19.09.2013, 11:05
Bornikkeny
Silenced by Bornikkeny
offline
Опыт: 24,410
Активность:
  • найти угол межу центром области и юнитом
  • юзаем схему CosBJ и SinBJ
И далее с помощью костылей можно на чистую воду выйти :-)
Старый 19.09.2013, 11:11
Vadik29
Choice Battle 1.6а
offline
Опыт: 15,845
Активность:
Bornikkeny, где я возьму расстояние на которое я должен пройти?
Старый 19.09.2013, 11:14
Bornikkeny
Silenced by Bornikkeny
offline
Опыт: 24,410
Активность:
Vadik29, ой, вот я тут ступил-так ступил... ;-D
Старый 19.09.2013, 11:33
Vadik29
Choice Battle 1.6а
offline
Опыт: 15,845
Активность:
По-моему немного хард для варика :D
Миниатюры
Кликните на картинку для увеличения
Название:  19092013050.jpg
Просмотров: 46
Размер:  564.9 Кбайт  
Старый 19.09.2013, 11:38
HolyMoon
Hly shit!
offline
Опыт: 6,986
Активность:
Vadik29, щас попробую вывести. Ты наркоманию нарисовал какую-то :D
Старый 19.09.2013, 11:40
Vadik29
Choice Battle 1.6а
offline
Опыт: 15,845
Активность:
Блин, моя формула может работать только для верхней стороны, для ост. надо еще 3 подобных.
Старый 19.09.2013, 11:54
HolyMoon
Hly shit!
offline
Опыт: 6,986
Активность:
Vadik29:
Блин, моя формула может работать только для верхней стороны, для ост. надо еще 3 подобных.
та же фигня :D
Старый 19.09.2013, 12:03
Vadik29
Choice Battle 1.6а
offline
Опыт: 15,845
Активность:
Вот то, что есть на данный момент, надо выводить еще для 3х сторон. И если будет норм, можно в базу добавить.
function HardLine takes unit A, real 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)
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

elseif y < y2

elseif x < x2

endif

AC = SquareRoot(AM*AM + AD-SquareRoot((KB*DO/BO)*(KB*DO/BO)-AM*AM))
return AC 
endfunction
Старый 19.09.2013, 12:19
Melissa
Я всегда хочу как лучше!
offline
Опыт: 31,696
Активность:
Vadik29, страсти то какие. А что будет происходить в общем виде то, можно узнать?
Старый 19.09.2013, 12:19
Vadik29
Choice Battle 1.6а
offline
Опыт: 15,845
Активность:
NatureKid, Юнит вылетает за область и мне надо его двинуть в фиолетовую точку :D
Vadik29 добавил:
Вот, надо потестить)
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 = y
        DO = y1
        AM = DO - BO
        AD = SR(x, y, y1, 0)
        Kx = BO * Cos(a)
        Ky = BO * Sin(a)
        KB = SR(Kx, Ky, y, 0)
    elseif x < x2
        BO = x
        DO = x1
        AM = DO - BO
        AD = SR(x, y, 0, x1)
        Kx = BO * Cos(a)
        Ky = BO * Sin(a)
        KB = SR(Kx, Ky, 0, x)
    endif

    AC = SquareRoot(AM * AM + AD - SquareRoot((KB * DO / BO) * (KB * DO / BO) - AM * AM))
    return AC
endfunction
Старый 19.09.2013, 12:24
HolyMoon
Hly shit!
offline
Опыт: 6,986
Активность:
То, что вышло у меня. Не проверял, правда
» code
function FuncName takes unit Targ, rect Rectangle returns real
local real a
local real b
local real top
local real left
local real ux = GetUnitX(Targ)
local real uy = GetUnitY(Targ)
  if uy > GetRectMaxY(Rectangle) then
    set top = GetRectMaxY(Rectangle)
  else
    if uy < GetRectMinY(Rectangle) then
      set top = GetRectMinY(Rectangle)
    else
      set top = uy
    endif
  endif
  if ux > GetRectMaxX(Rectangle) then
    set left = GetRectMaxX(Rectangle)
  else
    if ux < GetRectMinX(Rectangle) then
      set left = GetRectMinX(Rectangle)
    else
      set left = ux
    endif
  endif
  set a = RAbsBJ( RAbsBJ(GetRectCenterY(Rectangle)) - RAbsBJ(top) )
  set b = RAbsBJ( RAbsBJ(GetRectCenterX(Rectangle)) - RAbsBJ(left) )
     return SquareRoot(a * a + b * b)
endfunction
HolyMoon добавил:
Vadik29, одно и тоже в каждом ифе - наверное стоит вынести наружу все это? :D
        AM = DO - BO
        Kx = BO * Cos(a)
        Ky = BO * Sin(a)
        KB = SR(Kx, Ky, y1, 0)
Старый 19.09.2013, 12:40
Vadik29
Choice Battle 1.6а
offline
Опыт: 15,845
Активность:
HolyMoon, в последних двух ошибка, там не одно и тоже.
Старый 19.09.2013, 12:42
Melissa
Я всегда хочу как лучше!
offline
Опыт: 31,696
Активность:
Vadik29, типа кольца тралла что ли?
А почему просто не сравнивать в области ли он и если нет - двигать навстречу центру области?
или нет?
NatureKid добавил:
хотя ы, в конкретную точку же надо
Старый 19.09.2013, 12:46
Vadik29
Choice Battle 1.6а
offline
Опыт: 15,845
Активность:
NatureKid, Нет, это как бы игровая площадь, а скилами, юниты могут вылетать в черную зону, эта функция препятствует этому реагируя на вылет.
Старый 19.09.2013, 12:47
HolyMoon
Hly shit!
offline
Опыт: 6,986
Активность:
а предотвратить вылет не пробовал? :D
Старый 19.09.2013, 12:51
Vadik29
Choice Battle 1.6а
offline
Опыт: 15,845
Активность:
HolyMoon, Там слишком много нюансов и скилов которые переделывать очень много, проще сделать так.
Старый 19.09.2013, 12:56
HolyMoon
Hly shit!
offline
Опыт: 6,986
Активность:
Vadik29, ну, как знаешь
Старый 19.09.2013, 13:04
Ответ

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

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

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

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



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