Сейчас 23:00:55 Пятница, 22 ноября, 2024 год
[ x ] Главная ⇒ Форум ⇐ RSS Файлы Cтатьи Картинки В о й т и   или   з а р е г и с т р и р о в а т ь с я


[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Модератор форума: PUVer, SirNikolas, Ty3uK  
[Вопрос] PickedUnit или динамические триггеры?
ZonneryДата: Понедельник, 11 Марта 2013, 13:34:36 | Сообщение # 1
3 уровень
Группа: Проверенные
Сообщений: 42
Награды: 0
Репутация: 95
Блокировки:
Собственно, зачем тратить громадные ресурсы на pick every unit в системе движения, если можно создать для каждого снаряда отдельный триггер, который регистрирует вхождение юнита?



Но создавать триггеры каждый раз... утечно? Да, если их не очищать. При правильном удалении триггера(условия, действия, обнуление), память не засоряется, ну или засоряется незначительно даже при низких периодах ^_^ . Простейшая наработка делает следующее:
    Получает юнита-кастера
    Ищет пустое место в стеке
    Создаёт юнит снаряд
    Попарно заполняет ячейки массивов в стеке
    Создаёт триггер для снаряда, регистрирующий вхождение юнита
    Запускает таймер(если он не запущен) для обработки стека
    Таймер двигает все снаряды в стеке(массив не прогоняется полностью, если включён модуль поиска макс. не пустого индекса массива)


Само движение лишь набросок(здесь даже не учтены перепады высот, склоны и остальные хитрости) Да и на быдлокод не обращайте внимания, я не мастер оптимизации :)(p.s. хэш не перевариваю, вместо него юзаю стек и парные массивы) Фишка в том, что использование динамических триггеров, позволяет избежать поиска юнита вокруг каждый период таймера. Поиск производится лишь при регистрации вхождения триггером.
То бишь по идее это должно быть быстрее обычной системы движения. К слову, при периоде в 0.02 одновременно без лагов я тестировал 1000 снарядов сразу, на 1500 уже начинает подлагивать(карта и без того далеко не пустая, чего только стоит PDL система физики).
Что вы думаете насчёт этого?


Мир, как зеркало, отражает ваше отношение к нему. Когда боретесь с миром, он борется с вами. Когда прекращаете свою битву, мир идет навстречу.(В.Зеланд)
vk.com/zonnery


Сообщение отредактировал Zonnery - Понедельник, 11 Марта 2013, 13:37:07
 

NaturekidДата: Понедельник, 11 Марта 2013, 16:50:34 | Сообщение # 2
Группа: Заблокированные
Сообщений: 4982
Награды: 3
Репутация: 3347
Блокировки:
Делал купол войда с пикевриюнит.
Мой слон нахер вис с событием 0.5 сек.
Любой другой вариант уже лучше.
на джассе тем более, как ты уже заметил - триггер дестроить и всё...


 

DragoNДата: Понедельник, 11 Марта 2013, 17:02:06 | Сообщение # 3
Инквизитор
Группа: Стримеры
Сообщений: 4348
Награды: 7
Репутация: 2776
Блокировки:
Цитата (Zonnery)
Но создавать триггеры каждый раз... утечно? Да, если их не очищать. При правильном удалении триггера(условия, действия, обнуление), память не засоряется, ну или засоряется незначительно даже при низких периодах ^_^

динамические триггеры засирают память намного сильнее, чем грамотный пик юнитов, даже если эти триггеры правильно очищать


El Psy Congroo
 

BruДата: Понедельник, 11 Марта 2013, 17:09:24 | Сообщение # 4
i<3bo4k@
Группа: Акулы
Сообщений: 4750
Награды: 2
Репутация: 1960
Блокировки:
Давно известная хрень в варкрафте, что триггеры ты не сотрёшь
 

Ty3uKДата: Понедельник, 11 Марта 2013, 17:13:27 | Сообщение # 5
Группа: Ветераны
Сообщений: 6125
Награды: 2
Репутация: 1617
Блокировки:

Добавлено (11 Марта 2013, 17:13:27)
---------------------------------------------
Да, кстати, мне одному кажется, что заставлять варик при инициализации забивать 8191 значение нуллов - это бред?


╭∩╮(︶︿︶)╭∩╮
"Ульта Тайда мне в жопу!" © k0fe1n
Статьи: MUI-1|MUI-2|Шрифт
Полезности: JASP|JNGP|Уголок библиотек
 

DragoNДата: Понедельник, 11 Марта 2013, 17:16:35 | Сообщение # 6
Инквизитор
Группа: Стримеры
Сообщений: 4348
Награды: 7
Репутация: 2776
Блокировки:
Цитата (Ty3uK)

Да, кстати, мне одному кажется, что заставлять варик при инициализации забивать 8191 значение нуллов - это бред?

чтоб уж точно, лол
это как инты обнулять имхо
тем более глобалки же


El Psy Congroo
 

SirNikolasДата: Понедельник, 11 Марта 2013, 17:29:14 | Сообщение # 7
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
Цитата (Ty3uK)
Да, кстати, мне одному кажется, что заставлять варик при инициализации забивать 8191 значение нуллов - это бред?
Все массивы (и локальные, и глобальные) при создании инициализируются значениями по умолчанию.
Я, видимо, невнимательно смотрел код, но где там забивание 8191 значения?


 

NaturekidДата: Понедельник, 11 Марта 2013, 17:35:23 | Сообщение # 8
Группа: Заблокированные
Сообщений: 4982
Награды: 3
Репутация: 3347
Блокировки:
Дурацкий вопрос - что именно там реализовывается? В двух словах

 

Ty3uKДата: Понедельник, 11 Марта 2013, 17:37:27 | Сообщение # 9
Группа: Ветераны
Сообщений: 6125
Награды: 2
Репутация: 1617
Блокировки:
Он ставит массивам размерность - разве это у нас не генерирует цикл с забиванием?

╭∩╮(︶︿︶)╭∩╮
"Ульта Тайда мне в жопу!" © k0fe1n
Статьи: MUI-1|MUI-2|Шрифт
Полезности: JASP|JNGP|Уголок библиотек
 

SirNikolasДата: Понедельник, 11 Марта 2013, 17:41:47 | Сообщение # 10
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
Цитата (Ty3uK)
Он ставит массивам размерность - разве это у нас не генерирует цикл с забиванием?
Нет. Просто если поставить размерность больше 8192, JassHelper создаст несколько массивов и функции доступа типа таких:
Код
function func________get takes integer i returns integer
    if i < 8192 then
        return arr_a[i]
    endif
    return arr_b[i - 8192]
endfunction

function func________set takes integer i, integer value returns nothing
    if i < 8192 then
        set arr_a[i] = value
    else
        set arr_b[i - 8192] = value
    endif
endfunction
Так можно хоть int a[100500] объявить.


 

Ty3uKДата: Понедельник, 11 Марта 2013, 17:48:32 | Сообщение # 11
Группа: Ветераны
Сообщений: 6125
Награды: 2
Репутация: 1617
Блокировки:
Понятно, спасибо за информацию.

╭∩╮(︶︿︶)╭∩╮
"Ульта Тайда мне в жопу!" © k0fe1n
Статьи: MUI-1|MUI-2|Шрифт
Полезности: JASP|JNGP|Уголок библиотек
 

ZonneryДата: Понедельник, 11 Марта 2013, 19:33:34 | Сообщение # 12
3 уровень
Группа: Проверенные
Сообщений: 42
Награды: 0
Репутация: 95
Блокировки:
Цитата (DragoN)
динамические триггеры засирают память намного сильнее, чем грамотный пик юнитов, даже если эти триггеры правильно очищать

Открой любой редактор памяти и посмотри память вара, память используется лишь при первом использовании стека ячейки триггера, далее она всегда очищается до исходного состояния. Если утечки же и есть, то они незначительны(я таковых вообще не увидел в редакторе памяти), и ими можно пожертововать, располагая системой движения до 1000 юнитов одновременно.


Мир, как зеркало, отражает ваше отношение к нему. Когда боретесь с миром, он борется с вами. Когда прекращаете свою битву, мир идет навстречу.(В.Зеланд)
vk.com/zonnery
 

DragoNДата: Понедельник, 11 Марта 2013, 19:59:46 | Сообщение # 13
Инквизитор
Группа: Стримеры
Сообщений: 4348
Награды: 7
Репутация: 2776
Блокировки:
Цитата (Zonnery)

Открой любой редактор памяти и посмотри память вара, память используется лишь при первом использовании стека ячейки триггера, далее она всегда очищается до исходного состояния. Если утечки же и есть, то они незначительны(я таковых вообще не увидел в редакторе памяти), и ими можно пожертововать, располагая системой движения до 1000 юнитов одновременно.

я бы не говорил, если инфа была бы не проверена :)


El Psy Congroo
 

SirNikolasДата: Вторник, 12 Марта 2013, 12:39:27 | Сообщение # 14
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
Цитата (DragoN)
я бы не говорил, если инфа была бы не проверена :)
А теперь вопрос на засыпку: на каком патче? Да, на 1.24b и у меня не удалялись, но ведь возможно, что Blizzard'ы это пофиксили? Если человек сразу предлагает воспользоваться редактором памяти, скорее всего, сам он это уже сделал, не так ли?
Цитата (Zonnery)
p.s. хэш не перевариваю, вместо него юзаю стек и парные массивы
^_^
Цитата (Ty3uK)
Он ставит массивам размерность - разве это у нас не генерирует цикл с забиванием?
А, понял, где ты ошибся. Когда в GUI массиву ставишь размерность, WE генерирует цикл.


 

DragoNДата: Вторник, 12 Марта 2013, 17:29:26 | Сообщение # 15
Инквизитор
Группа: Стримеры
Сообщений: 4348
Награды: 7
Репутация: 2776
Блокировки:
Цитата (SirNikolas)
А теперь вопрос на засыпку: на каком патче? Да, на 1.24b и у меня не удалялись, но ведь возможно, что Blizzard'ы это пофиксили? Если человек сразу предлагает воспользоваться редактором памяти, скорее всего, сам он это уже сделал, не так ли?

будь это после 1.24, то думаю близзарды бы вписали это в чейнжлог hmm
может он и прав, в своё время на xgm'е проводились тесты на эту тему
в идеале бы приаттачить карту с примером для детальных тестов


El Psy Congroo
 

ZonneryДата: Вторник, 12 Марта 2013, 17:33:24 | Сообщение # 16
3 уровень
Группа: Проверенные
Сообщений: 42
Награды: 0
Репутация: 95
Блокировки:
Ну как бы система сама под спойлером, вставил в любую карту и тестировать можно сколько хочешь)

Мир, как зеркало, отражает ваше отношение к нему. Когда боретесь с миром, он борется с вами. Когда прекращаете свою битву, мир идет навстречу.(В.Зеланд)
vk.com/zonnery
 

DragoNДата: Вторник, 12 Марта 2013, 17:44:30 | Сообщение # 17
Инквизитор
Группа: Стримеры
Сообщений: 4348
Награды: 7
Репутация: 2776
Блокировки:
система-то есть, а карту собирать лениво D:

El Psy Congroo
 

ZonneryДата: Вторник, 12 Марта 2013, 17:46:33 | Сообщение # 18
3 уровень
Группа: Проверенные
Сообщений: 42
Награды: 0
Репутация: 95
Блокировки:
Как же вы проекты-то то делаете :o

Мир, как зеркало, отражает ваше отношение к нему. Когда боретесь с миром, он борется с вами. Когда прекращаете свою битву, мир идет навстречу.(В.Зеланд)
vk.com/zonnery
 

DragoNДата: Вторник, 12 Марта 2013, 18:21:30 | Сообщение # 19
Инквизитор
Группа: Стримеры
Сообщений: 4348
Награды: 7
Репутация: 2776
Блокировки:
так и делаем dunno

El Psy Congroo
 

  • Страница 1 из 1
  • 1
Поиск:

Copyright © 2006 - 2024 Warcraft3FT.info При копировании материалов c сайта ставьте, пожалуйста, активную обратную ссылку на нас • Design by gReeB04ki ©
Хостинг от uCoz