для варкрафт 3 я распаковал код и смотрел код jass самой не лагающей карты, все наверняка знаете это дота. Короче код карты дота полностью сделан на триггерах, ну кроме одного таймера который тикает 999999 секунд. И связи с этим я решил что триггер лучше таймера и быстрее таймера +оптимизирован. Таймер получается хуже триггера? Вот в чём секрет профи.

Принятый ответ

зависит от твоих нужд
например, мне нужно хранить последние 5 секунд позиций нескольких юнитов, т.е. разбитые на участки по 0.25 секунд снимки хп/мп/координат каждого из них
это 5*4 = 20 значений каждого, итого 80
когда мы доходим до секунды 5.25, то надо сдвигать все предыдущие на единичку назад, и вставлять текущие данные на последний слот
это 79*4 операций чтения и 80*4 записей (считаю грубо, всё для примера)
когда это делается в хештбалице, нагрузка значительно выше выходит, чем если делать на массивах (хт перебирает ключи как ассоциативный массив, а обычный массив просто обращается к памяти с указанным адресом, в разы быстрее).
Но чтобы делать эту процедуру на массивах, тебе нужен индексатор этих самых юнитов, чтобы их уникальный ключ не превышал лимит массива. Это дополнительный код, который тебе нужно реализовать с нуля. Но после реализации система становится быстрее.
Была она до этого медленной? да. Влияло ли это на игру? Нет, это 100-200 микросекунд.
Опять же, когда у тебя есть пре-процессор типа vJASS + сниппеты типа Table , которые имитируют массив самостоятельно, они снимают с тебя часть обязанностей. Но из-за того, что они созданы для ОБЩЕГО случая, они все равно не дадут того выигрыша в скорости, который можешь ожидать.
Используй то, что тебе удобнее, и оптимизируй только когда это реально влияет на игру. habr.com/ru/post/550926
И не забывай, что дота стала популярной еще во времена, когда была написана почти целиком на ГУИ и нихера в ней не пахло даже оптимизацией.
`
ОЖИДАНИЕ РЕКЛАМЫ...

Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
0
26
3 года назад
0
Типа рофл? или что?
Ты сейчас сравниваешь два типа объектов - таймер и триггер.
О чём ты вообще?)) пример хоть бы кинул какой
2
28
3 года назад
2
И связи с этим я решил что триггер лучше таймера и быстрее таймера +оптимизирован
Доту писали странные люди, имхо. Таймер куда гибче триггера и легче весит.
0
32
3 года назад
0
Там просто их юзали, потому что было + так было удобнее отлавливать попутно события смерти и тому подобное. Таймер гораздо легче и не плодит обьекты, пусть trigger condition после первого создания зависает в болекспре и не утекает, но 1 то раз его нужно создать, а вот для таймера нет такого. Но таймеры могут лишь считать время, они не могут сработать при смерти юнита или еще какого то события, да и триггер проще вызвать из вне (в доте так диспелы и много чего другого построено, TriggerEvaгuate для триггеров что сохранены на юнита и обеспечивают дебаффы)

Насчет нелагающей - громко сказано, качество кода в большинстве мест унылое и тонны утечек, стоить еще каплю кода добавить - баги\лаги, вылеты, пока не проведешь чистку и оптимизацию, тогда внезапно все норм.
0
2
3 года назад
0
quq_CCCP, да на таймере фиг сделаешь событие юнит получил урон. Триггер реально удобнее. Для таймера можно отловить еще смерть через GetWedWidgetLife. А разве триггер не считает время?
0
32
3 года назад
0
Nikolay36, смотри внимательно как сделано в доте, и почему триггер, сразу станет ясно, к примеру триггером двигают снаряд, и смотрят что цель умрет, или цель юзнет абилку (блинка), чтобы сделать промах, вот как ты это сделашь таймером и сколько это займет кода? Так что следует думать что оптимальнее использовать.
2
16
3 года назад
2
массивы вместо хт, таймеры вместо триггеров и другие методы экономии на спичках в крематории
0
32
3 года назад
0
DracoL1ch, еще забыл про ресайклы таймеров =)
Так то для каких то простых действий, вроде задежрки перед хилом для блока урона, таймер предпочтительнее, для всяких баффов триггеры лучше т.к там есть доступ к куче событий.
1
17
3 года назад
1
забей и делай как те угодно на триггах, таймерах даже вейты используй
0
2
3 года назад
0
DracoL1ch, хэш таблица медленнее массива?

quq_CCCP, понял спасибо за ответ
Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.