[Вопрос] События
|
|
FatalBlade | Дата: Четверг, 08 Марта 2012, 23:08:37 | Сообщение # 1 |
10 уровень
Группа: Проверенные
Сообщений: 1523
Награды: 0
Репутация: 439
Блокировки:
| Если я триггерно создаю обьект, и триггерно добавляю к нему событие, например Получает Урон, или Умирает... то это событие висит в памяти. Если условия и действия удаляются (что в принципе совершенно не актуально (имхо)), то как удаляются события? И вообще являются ли они утечными? Например если у меня часто создаются обьекты, и к каждому добавляется событие "Обьект умирает", то после смерти обьекта, мне это событие уже не нужно - будут создаваться новые обьекты, и к ним будут добавляться новые события. Так как избавиться от ненужных событий, и нужно ли это вообще?
|
|
|
|
Impregnable | Дата: Пятница, 09 Марта 2012, 06:01:03 | Сообщение # 2 |
6 уровень
Группа: Проверенные
Сообщений: 231
Награды: 0
Репутация: 92
Блокировки:
| Постоянно создаются такие темы. Неужели никто так и не написал про события? Ладно, тогда первым буду я.
Начну с того, что если следовать "вашей" логике, что события каким-то образом создаются, то без добавления триггера "юнит получил урон" я не смогу его ударить? Конечно нет. На самом деле не триггеры вызывают события, а наоборот. И у каждого игрового объекта сразу после создания есть определенные события. Например: Code //где-то тут war, что-то делает ... //тут Близы решили, что перед тем, как нанести урон юниту(gg_unit001) надо бы дать пользователю отловить это событие //запускается список триггеров ... //где-то тут war, что-то делает: считает урон, изменяет здоровье, запускает другие события и.т.д ...
function test takes nothing returns nothing local trigger trg = CreateTrigger() local trigger trg2 = CreateTrigger()
call TriggerRegisterUnitEvent(trg2, gg_unit001, EVENT_UNIT_DAMAGED) //добавлят триггер в список на 1 место call TriggerRegisterUnitEvent(trg, gg_unit001, EVENT_UNIT_DAMAGED) //добавлят триггер в список на 2 место
... endfunction Сначала будет вызван триггер trg2 а затем trg
Quote то как удаляются события? Теперь правильно вопрос должен звучать так "как удаляются триггеры из событий" - сразу после DestroyTrigger(...) Quote И вообще являются ли они утечными? Вопрос уже не имеет смысла.
Вроде все...
|
|
|
|
SirNikolas | Дата: Пятница, 09 Марта 2012, 08:09:06 | Сообщение # 3 |
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
| Quote (Impregnable) Неужели никто так и не написал про события? 22-30465Quote (FatalBlade) События (Утечны? Удаляемы?) Да. Нет.
|
|
|
|
Impregnable | Дата: Пятница, 09 Марта 2012, 08:33:03 | Сообщение # 4 |
6 уровень
Группа: Проверенные
Сообщений: 231
Награды: 0
Репутация: 92
Блокировки:
| Quote (SirNikolas) Quote (FatalBlade) События (Утечны? Удаляемы?) Да Разве я непонятно написал( Или я тебя не так понял: Code function Leak takes nothing returns nothing local trigger trg = CreateTrigger()
call TriggerRegisterTimerEvent(trg, .01, true) //call TriggerRegisterUnitEvent(...) //call TriggerRegister...(...) call DestroyTrigger(trg)
set trg = null endfunction
function Init takes nothing returns nothing call TimerStart(CreateTimer(), .01, true, function Leak) endfunction Что-то никаких утечек не замечено.
|
|
|
|
SirNikolas | Дата: Пятница, 09 Марта 2012, 08:54:48 | Сообщение # 5 |
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
| Ничего не понимаю. Тогда я тестировал, и вес процесса увеличивался. Теперь нет. Скорее всего, это зависит от патча.
|
|
|
|
Ty3uK | Дата: Пятница, 09 Марта 2012, 08:56:20 | Сообщение # 6 |
Группа: Ветераны
Сообщений: 6125
Награды: 2
Репутация: 1617
Блокировки:
| Локальный триггер нельзя полностью вычеркнуть из памяти (фкофф писал). Ну и они иногда поток повесить могут (при уничтожении)
|
|
|
|
FatalBlade | Дата: Пятница, 09 Марта 2012, 11:19:33 | Сообщение # 7 |
10 уровень
Группа: Проверенные
Сообщений: 1523
Награды: 0
Репутация: 439
Блокировки:
| Impregnable, Ты хочешь сказать, что события не ДОБАВЛЯЮТСЯ, а УЖЕ СУЩЕСТВУЮТ для всех обьектов, и при триггерном "добавление", оно на самом деле просто АКТИВИРУЕТСЯ? Но если это так, то какой в этом смысл? Зачем близзардам нужно было так извращаться? Ведь отлов смерти юнита происходит по обычной схеме, так почему не могли так сделать и с уроном?
|
|
|
|
Impregnable | Дата: Пятница, 09 Марта 2012, 12:06:50 | Сообщение # 8 |
6 уровень
Группа: Проверенные
Сообщений: 231
Награды: 0
Репутация: 92
Блокировки:
| Не умею я объяснять... Представь, что событие это дни в неделе, году, веке... Оно наступит независимо от тебя (хотя в игре надо кликнуть мышкой или нажать кнопку). Воооот. И у тебя есть на каждый день список дел. Каждый пункт, которого можно представить в виде триггера. Ну и все эти пункты надо выполнить в своей очередности.
|
|
|
|
FatalBlade | Дата: Пятница, 09 Марта 2012, 12:23:49 | Сообщение # 9 |
10 уровень
Группа: Проверенные
Сообщений: 1523
Награды: 0
Репутация: 439
Блокировки:
| Ну так то что я и говорю, что они существуют, просто к ним прикрепляются действия, так ведь? Но если у меня есть триггер на отлов урона, то зачем тогда регистрировать событие для того или иного юнита? Ведь событие то же самое, и действия те же самые. Только обьект другой
|
|
|
|
Impregnable | Дата: Пятница, 09 Марта 2012, 12:44:19 | Сообщение # 10 |
6 уровень
Группа: Проверенные
Сообщений: 231
Награды: 0
Репутация: 92
Блокировки:
| Quote Ну так то что я и говорю, что они существуют, просто к ним прикрепляются действия, так ведь? Событий как таковых не существет. Просто работает приложение, идет код и в каком-то месте Близы решили дать возможность пользователю реагировать на это.
Quote Но если у меня есть триггер на отлов урона, то зачем тогда регистрировать событие для того или иного юнита? Ведь событие то же самое, и действия те же самые. Только обьект другой? Как зачем? Для удобства. Так бы все работало как EVEN_PLAYER_UNIT_ATTACKED ну и подобные события. Да и занимает памяти совсем ничтожное количество.
|
|
|
|
FatalBlade | Дата: Пятница, 09 Марта 2012, 13:30:31 | Сообщение # 11 |
10 уровень
Группа: Проверенные
Сообщений: 1523
Награды: 0
Репутация: 439
Блокировки:
| Quote (Impregnable) Для удобства. Помоему вот так: Quote (Impregnable) Так бы все работало как EVEN_PLAYER_UNIT_ATTACKED ну и подобные события. И есть удобнее
|
|
|
|
Ty3uK | Дата: Пятница, 09 Марта 2012, 13:35:41 | Сообщение # 12 |
Группа: Ветераны
Сообщений: 6125
Награды: 2
Репутация: 1617
Блокировки:
| Не совсем. Допустим, у тебя на карте 12 героев. Всего. Тебе нужно отловить событие получение урона только для них. Если бы это событие работало как атака, то брались бы все юниты, ты бы потом отсеивал ненужных проверкой. Спрашивается- зачем?
|
|
|
|
FatalBlade | Дата: Пятница, 09 Марта 2012, 14:40:41 | Сообщение # 13 |
10 уровень
Группа: Проверенные
Сообщений: 1523
Награды: 0
Репутация: 439
Блокировки:
| Так значит лучше вообше не использовать события на подобие EVEN_PLAYER_UNIT_ATTACKED, а всегда пользоваться добавлением событий? Например если выбрал такого то героя, то добавить ему событие EVEN_PLAYER_UNIT_SPELL_EFFECT. Я правильно понял?
|
|
|
|
lawson | Дата: Пятница, 09 Марта 2012, 15:12:17 | Сообщение # 14 |
Группа: Проверенные
Сообщений: 3482
Награды: 0
Репутация: 974
Блокировки:
| Quote (Impregnable) На самом деле не триггеры вызывают события, а наоборот События есть всегда, они уже со старта игры, с создания юнита уже есть - одни события для одних объектов другие для других. Все события в игре, в основном срабатываю при изменении свойств объекта. FatalBlade, читай
Nic nie wiem bo mam chuj. редактирую посты! ВСЕ!
Сообщение отредактировал lawson - Пятница, 09 Марта 2012, 15:13:29 |
|
|
|
FatalBlade | Дата: Суббота, 10 Марта 2012, 18:29:42 | Сообщение # 15 |
10 уровень
Группа: Проверенные
Сообщений: 1523
Награды: 0
Репутация: 439
Блокировки:
| Quote (FatalBlade) Так значит лучше вообше не использовать события на подобие EVEN_PLAYER_UNIT_ATTACKED, а всегда пользоваться добавлением событий? Например если выбрал такого то героя, то добавить ему событие EVEN_PLAYER_UNIT_SPELL_EFFECT. Я правильно понял?
|
|
|
|
Impregnable | Дата: Суббота, 10 Марта 2012, 19:21:13 | Сообщение # 16 |
6 уровень
Группа: Проверенные
Сообщений: 231
Награды: 0
Репутация: 92
Блокировки:
| EVENT_PLAYER_UNIT_SPELL_EFFECT будет срабатывать намного чаще чем EVENT_UNIT_SPELL_EFFECT
Надо тебе отображать название примененного заклинания, используй EVENT_PLAYER_UNIT_SPELL_EFFECT Есть у тебя способность, которая только у 1 юнита, используй EVENT_UNIT_SPELL_EFFECT Все.
Вообще не стоит об этом даже задумываться. Вон в доте более 200 триггерных способностей и все с событием EVENT_PLAYER_UNIT_SPELL_EFFECT.
|
|
|
|
Ty3uK | Дата: Суббота, 10 Марта 2012, 19:56:32 | Сообщение # 17 |
Группа: Ветераны
Сообщений: 6125
Награды: 2
Репутация: 1617
Блокировки:
| Ну... "все мы знаем, что Айсфрог нубло, не умеющее кодить"
|
|
|
|
Impregnable | Дата: Суббота, 10 Марта 2012, 20:29:34 | Сообщение # 18 |
6 уровень
Группа: Проверенные
Сообщений: 231
Награды: 0
Репутация: 92
Блокировки:
| Если не лагает, то зачем вылизывать весь код и изощряться?
|
|
|
|
Ty3uK | Дата: Суббота, 10 Марта 2012, 20:31:28 | Сообщение # 19 |
Группа: Ветераны
Сообщений: 6125
Награды: 2
Репутация: 1617
Блокировки:
| Ну... Лично я задался маниакальной идеей писать реально чистый и правильный код, который не будет лагать даже на старых машинах. А дота лагает
|
|
|
|
Impregnable | Дата: Суббота, 10 Марта 2012, 20:40:07 | Сообщение # 20 |
6 уровень
Группа: Проверенные
Сообщений: 231
Награды: 0
Репутация: 92
Блокировки:
| Можно знать как "писать реально чистый и правильный код", а дальше hello world и не уйти. "Фрог" возможно и нубло в плане кода, но их же карта самая популярная. Разве нет?
|
|
|
|
Ty3uK | Дата: Суббота, 10 Марта 2012, 20:42:51 | Сообщение # 21 |
Группа: Ветераны
Сообщений: 6125
Награды: 2
Репутация: 1617
Блокировки:
| Но я же сейчас не говорю про популярность карты. Ну а я уже давно ушел от привет, мир
|
|
|
|
Impregnable | Дата: Суббота, 10 Марта 2012, 20:56:22 | Сообщение # 22 |
6 уровень
Группа: Проверенные
Сообщений: 231
Награды: 0
Репутация: 92
Блокировки:
| Quote (Ty3uK) Ну а я уже давно ушел от привет, мир Это же просто замечательно. Quote (Ty3uK) Но я же сейчас не говорю про популярность карты. Так, что ты от меня хочешь? Quote (Ty3uK) А дота лагает Как там... "купи интернет и выбрось калькулятор"
|
|
|
|
FatalBlade | Дата: Суббота, 10 Марта 2012, 21:02:13 | Сообщение # 23 |
10 уровень
Группа: Проверенные
Сообщений: 1523
Награды: 0
Репутация: 439
Блокировки:
| Карты в основном лагают не изза кода, а изза множества созданных юнитов/предметов/способностей в РО.
Изза кода лагают карты когда есть утечки, либо когда очень часто создаются обьекты
|
|
|
|
Ty3uK | Дата: Суббота, 10 Марта 2012, 21:05:31 | Сообщение # 24 |
Группа: Ветераны
Сообщений: 6125
Награды: 2
Репутация: 1617
Блокировки:
| У меня далеко не калькулятор. И что же вы всегда так ироничны и вызывающи? >_<
|
|
|
|
FatalBlade | Дата: Суббота, 10 Марта 2012, 21:52:03 | Сообщение # 25 |
10 уровень
Группа: Проверенные
Сообщений: 1523
Награды: 0
Репутация: 439
Блокировки:
| Quote (Ty3uK) У меня далеко не калькулятор. И что же вы всегда так ироничны и вызывающи? >_< И у тебя моя мапа лагает?
|
|
|
|