Xipxop
Круче варика, только c++!
offline
Опыт:
7,646Активность: |
Действия над всей группы, оптимальный способ
Все добрый вечер!
Делая свой скилл который должен в расстоянии от 300 до 350, должен пихнуть назад юнита. Так вот, проблема в том, что мои знания реализации Пика всей группы, без лагов и без юзания глобальных переменных, на этом заканчиваются... Код:
Эта функция вызывается каждые 0.05 сек, таймером. Как оптимизировать ту часть которая пикает всех игроков? Конечно можно сделать так, чтобы действия над юнитами были занесены в отдельную функцию, но в ней я не буду иметь доступа к двум локальным переменным: x, y Пожалуйста, скажите радикальный способ, без использования глобальных переменых! Если вы напишите на cJass, то можете немного объяснить. И еще одно, если есть уже готовые успешные скилы, работающие с групами, то можете их привести в пример? или кинуть сам скил, буду рад изучить таковой! Заранее благодарю! |
29.09.2013, 22:39 | #1
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
HolyMoon
Hly shit!
offline
Опыт:
6,986Активность: |
Xipxop, что-нибудь типо
|
29.09.2013, 22:48 | #2
+2/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Xipxop
Круче варика, только c++!
offline
Опыт:
7,646Активность: |
блин, я ж забыл удалять юнита из группы...
Но всеравно кто знает способ по лучше чем этот? Этот способ хоть и годный, но он как никак вызывает некие задержки |
29.09.2013, 22:56 | #3
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Hate
конь вакуумный
offline
Опыт:
43,137Активность: |
он там вызывать задержки может если вы карту захламили и/или у вас там под несколько тысяч юнитов и/или у вас комп это калькулятор |
29.09.2013, 23:12 | #4
+1/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
DioD
offline
Опыт:
45,134Активность: |
function Trig_TotemPitasenya_Timer takes nothing returns boolean
inline GLOBAL static final group g = CreateGroup() if FilterUnit() == null then groupEnumUnitsInRange(g,x,y,300, function Trig_TotemPitasenya_Timer) else KillUnit(FilterUnit()) endif return false endfunction |
30.09.2013, 12:17 | #5
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Hanabishi
COOL STATUS
offline
Опыт: отключен
|
Что-то вы мутите непонятное. Глобальные переменные использовать можно и нужно. Зачем постоянно создавать и удалять группу, если можно использовать одну глобальную?
Если надо перебор группы в одной функции, то:
Однако, перебор циклом не самый производительный вариант. |
30.09.2013, 13:38 | #6
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
quq_CCCP
Я белый и пушистый!
offline
Опыт:
94,185Активность: |
Hanabishi, и чего все не юзайют for group ? Типа переменные локальные туда не передаются, да и пофиг, есть же темповые глобалки.... |
30.09.2013, 13:45 | #7
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Hanabishi
COOL STATUS
offline
Опыт: отключен
|
quq_CCCP:
Автор просил в одной функции, он получил. Для спелла метод пойдёт любой, главное без утечек сделать.
ForGroup тоже не самый быстрый, нужно делать через фильтр ) |
30.09.2013, 13:48 | #8
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
adic3x
offline
Опыт:
108,439Активность: |
Изыди, Сатана!
Вариант на cJass:
ADOLF добавил:
Кстати наоборот, перебор циклом юнитов в группе быстрее, мы проводили исследования. Отредактировано ADOLF, 10.03.2015 в 16:20. |
30.09.2013, 14:03 | #9
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Hanabishi
COOL STATUS
offline
Опыт: отключен
|
Помнится от цикла отказался в силу ограничения количества итераций в варе. По производительности тут на самом деле разница между методами микроскопическая, при нынешних компьютерных мощах. |
30.09.2013, 14:12 | #10
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Hate
конь вакуумный
offline
Опыт:
43,137Активность: |
это уже предпочтения на уровне "какой рукой" |
30.09.2013, 21:12 | #11
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|