Добавлен Hodor
Делаю нативный AOE поиск юнитов в JASS
Все юниты на карте находятся в одной общей группе, карта небольшая
Юнитов ищу с помощью ForGroup по такой формуле: если (расстояние между координатами минус физический размер) меньше или равно AOE
Но я решил сделать эксперимент, брал юнита с дальней атакой, отбегал и давал приказ атаковать цель
Потом детектил ивент на атаку и измерял расстояние между координатами юнитов, в первом случае я атаковал слева и показало 830.031, во втором случае я уже атаковал справа и показало другие цифры 829.394
Повторил эксперимент ещё раз, атакуя с разных сторон и цифра получалась плюс-минус ~3 единицы, но не превышало максимальную возможную дальность атаки (физ. размер атакующего + радиус атаки атакующего + физ. размер цели)
И из за этого у меня возникли сомнения что получится сделать нативный AOE поиск, который работал бы точно как AOE из обычных абилок варкрафта
UPD:
GroupEnumUnitsInRange просто тупо по расстоянию между координатами ищет юнитов, это не то
Все юниты на карте находятся в одной общей группе, карта небольшая
Юнитов ищу с помощью ForGroup по такой формуле: если (расстояние между координатами минус физический размер) меньше или равно AOE
Но я решил сделать эксперимент, брал юнита с дальней атакой, отбегал и давал приказ атаковать цель
Потом детектил ивент на атаку и измерял расстояние между координатами юнитов, в первом случае я атаковал слева и показало 830.031, во втором случае я уже атаковал справа и показало другие цифры 829.394
Повторил эксперимент ещё раз, атакуя с разных сторон и цифра получалась плюс-минус ~3 единицы, но не превышало максимальную возможную дальность атаки (физ. размер атакующего + радиус атаки атакующего + физ. размер цели)
И из за этого у меня возникли сомнения что получится сделать нативный AOE поиск, который работал бы точно как AOE из обычных абилок варкрафта
UPD:
GroupEnumUnitsInRange просто тупо по расстоянию между координатами ищет юнитов, это не то
Принятый ответ
C++ тоже показывает 832.0, на С почему-то не смог запустить.
UrsaBoss, вообще, используй нативки, они точнее будут нахождения дистанции "руками" в данном случае. Но не используй Pow(), эта функция очень неточная.
UrsaBoss, вообще, используй нативки, они точнее будут нахождения дистанции "руками" в данном случае. Но не используй Pow(), эта функция очень неточная.
constant native IsUnitInRange takes unit whichUnit, unit otherUnit, real distance returns boolean
constant native IsUnitInRangeXY takes unit whichUnit, real x, real y, real distance returns boolean
constant native IsUnitInRangeLoc takes unit whichUnit, location whichLocation, real distance returns boolean
`
ОЖИДАНИЕ РЕКЛАМЫ...
Чтобы оставить комментарий, пожалуйста, войдите на сайт.
физ. размер атакующего 32
физ. размер цели 200
Хочется узнать, использует ли движок такой же способ AOE поиска, который хочу сделать я
Ред. PT153
А ландшафт плоский?
там просто по координатам)
В AOE способностей игра вычитает физ. размер из расстояния между координатами и проверяет получилось или нет меньше требуемого AOE
Если смотреть на глаз, то именно так и выходит
Наверное, тут может быть связано с точкой начала атаки у юнита в РО.
Ред. Hodor
8gabriel8: Т.е юнит может не остановиться именно на радиусе 832, а чуть дальше пройти до радиуса ~830?
По идее попробуй триггерно расставить юнитов, цель в (0;0), а атакующего сначала в (832;0), потом в (-832;0). Через секунду после атаки показывай расстояние между ними, если будет таким же, как описал в вопросе, то поставь точку начала атаки атакующему на (0;0;0), если опять расстояние будет таким же, то попробуй цели модель сменить на какую-нибудь идеально ровную.
Ред. Hodor
832.015 во всех случаях
слева, сверху, справа, снизу. И модель убирал и точку начала атаки
Убрал теорему Пифагора и посчитал просто по Y координатам и вышло ровно 832
Поставил 833 и показало 824.090
Я сделал вывод себе: теорема Пифагора немного неточная в варкрафте и юнит не всегда встает ровно в нужный радиус атаки (но при этом не превышает свой же доступный радиус атаки)
Короче, вот что нужно выяснить
Использует ли варкрафт на нативном уровне теорему так же как и в JASS?
Т.е в плане точности
К примеру игра получит расстояние 50, а в JASS будет 49.99999
Плохой пример, но думаю понятно
проверял уже
Но я уже сказал) Мне грубо говоря пофиг что там с дальностью атаки у юнитов, главное что она не превышает своего максимума
В данный момент я сомневаюсь в точности вычислений из под JASS
Т.к посчитал через теорему, получил 832.015
Посчитал просто Y2 минус Y1 получил 832.000
А если точность вычислений теоремы в JASS такая же как и в движке, то всё очень хорошо и можно будет закрыть вопрос.
Осталось подождать того кто сможет сказать это с уверенностью)
Ред. Hodor
Беру из координат X2 Y2 вычитаю X1 Y1 и потом полученные dx dy по отдельности возвожу в квадрат и слагаю, в конце из полученного числа вычисляю корень