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

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

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

offline
Опыт: 1,738
Активность:
Оптимизировать скил.
суть скила:



Создает огненную стену, курсором мышки, по кординатам формирующие линии, как грамотно подсчитать нанести урон, вргам, находящимся рядом с огнем? придется сверять наименьшее расстояние от каждой линии(стены огня) до точки (юнита), а если эти линии очень мелкие и их очень много, от каждой циклить практически тех-же самых юнитов и сверять с каждой?
Старый 21.03.2013, 02:22
agentex

offline
Опыт: 34,834
Активность:
брать юнитов энумом двигаясь по линии, создать временную группу заносить туда дамаженных юнитов, проверять что юнита в ней нет при следущем энуме. смотря каким образом наносится урон.
Старый 21.03.2013, 15:15
Zetox

offline
Опыт: 1,738
Активность:
каждые 0.33 сек, 2 и более раз за это время не наносится.

Имеешь ввиду, брать каждую точку(с некоторым интервалом) линии, и пикать юнитов вокруг?
Старый 21.03.2013, 15:54
DioD

offline
Опыт: 45,134
Активность:
достаточно пикнуть всех возможных юнитов один раз и прогонять их через геометрические функции, той же линии чтобы получить тех кто стоит в стенах.
Старый 21.03.2013, 16:03
DualShock

offline
Опыт: 5,023
Активность:
xgm.ru/forum/showthread.php?t=57341
Старый 21.03.2013, 16:40
Zetox

offline
Опыт: 1,738
Активность:
я тут набросал свой вариант на jass`e, расстояние от точки, до линии:

Код:
function DistancePoint_line takes real PointX, real PointY, real Line1X,real Line1Y,real Line2X, real Line2Y returns real
local real Vx = Line2X - Line1X
local real Vy = Line2Y - Line1Y

local real Wx = PointX - Line1X
local real Wy = PointY - Line1Y

local real Cxy = Vx*Wx + Vy*Wy
local real Mxy = Vx*Vx + Vy*Vy

if Cxy <= 0 then
    return SquareRoot( (PointX-Line1X)*(PointX-Line1X)  +  (PointY-Line1Y)*(PointY-Line1Y) )
endif
if Mxy <= Cxy then
    return SquareRoot( (PointX-Line2X)*(PointX-Line2X)  +  (PointY-Line2Y)*(PointY-Line2Y) )
endif

set Line1X = Line1X +  (Cxy*Vx)/Mxy
set Line1Y = Line1Y +  (Cxy*Vy)/Mxy
return SquareRoot( (PointX-Line1X)*(PointX-Line1X)  +  (PointY-Line1Y)*(PointY-Line1Y) )

endfunction


подойдет? или как она там высчитывается?

Отредактировано Zetox, 21.03.2013 в 17:11.
Старый 21.03.2013, 16:59
JassMan
свободен
offline
Опыт: 4,193
Активность:
Вдоль линии берёшь координаты (воображаемые точки) через одинаковые расстояния пикаешь вокруг них в группу и наносишь урон.
Вот пример, только там вместо урона юниты просто откидываются от линии.
Старый 21.03.2013, 17:21
Zetox

offline
Опыт: 1,738
Активность:
А не лучше брать, усредненную точку линии, и пикать юнитов в радиусе половины длины отрезка. И сверять функцией, что выше?
Старый 21.03.2013, 18:12
quq_CCCP
Я белый и пушистый!
offline
Опыт: 93,279
Активность:
Zetox, Была же на сайте функция принадлежит ли точка к произвольному четырёхугольнику (тут же и твоей линии) , дак вот как сказал товарищ DioD, прогоняй это условие через группу что если текущие координаты юнита принадлежат к линии (четырёхугольнику) и у юнита нету баффа горения (один из удобных методов фильтрации юнитов) то нанести урон и добавить бафф горения...
Надеюсь ума хватит бафф удалять через n сек, если будешь юзать таймеры и Аура замедления, но можно на парится и юзать дамми каст.
Старый 21.03.2013, 18:12
Zetox

offline
Опыт: 1,738
Активность:
close можно
Старый 25.03.2013, 20:56
Закрытая тема

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

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

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

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



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