Перейти к содержанию

Дайджесты за январь-февраль

Обновления гайдов и аддонов

Январь Февраль

Мониторинг серверов и редактор аддонов

Представляем вам две легенды. То, о чем можно было только мечтать, стало реальностью.

Мониторинг серверов Редактор аддонов

Подсказки из игры на вашем сайте

Теперь вы можете отображать сведения о внутриигровых элементах простым наведением курсора мыши.

Подробнее

Апдейтер аддонов

Представляем вам программу для автообновления аддонов и делимся подробностями.

Подробнее Скачать

Что выбрать: свои события или нет?


user02

Рекомендуемые сообщения

Добрый день.

 

Подскажите, пожалуйста, как лучше делать. Например, мы хотим отслеживать за появлением юнитов и хотим чтоб быстро отрабатывал скрипт. 

 

Первый подход.

Написать функцию обработчик onUnitSpawned() и зарегистрировать ее на обработку события EVENT_UNIT_SPAWNED.

Так как при старте аддона ничего не известно о уже имеющихся юнитах, то мы при старте получаем перечень юнитов и для каждого выполняем функцию onUnitSpawned().

 

Второй подход.

Написать функцию обработчик onUnitSpawned() и зарегистрировать ее на обработку своего события MY_EVENT_UNIT_SPAWNED. Посылаем событие MY_EVENT_UNIT_SPAWNED при возникновении EVENT_UNIT_SPAWNED. 

Так как при старте аддона ничего не известно о уже имеющихся юнитах, то мы при старте получаем перечень юнитов и для каждого посылаем событие MY_EVENT_UNIT_SPAWNED. 

 

 

Соответственно интересно какой из вариантов стоит выбрать, если, например, при старте нас окружает 100 или больше. 

 

Мои мысли про варианты: 

Первый вариант сразу получает юниты и начинает их орабатывать.

Второй вариант сразу получает юниты и генерит события, события в свою очередь обрабатываются и возможно параллельно.

Ссылка на комментарий
Поделиться на другие сайты

Не знаю на счет паралельности, я бы выбрал 1й вариант и не заморачивался.

Ссылка на комментарий
Поделиться на другие сайты

возможно параллельно

Чтобы добиться параллельности, надо для этого что-то сделать (написать соответствующий код). Ваше "возможно" говорит о том, что на данный момент не сделано ничего :) , поэтому лучше остановиться на первом варианте.

Если не критична скорость отображения юнитов, я бы воспользовался эвентом EVENT_UNITS_CHANGED, среднее запаздывание от EVENT_UNIT_SPAWNED порядка 50-100 мс. Зато есть шанс, что все 100 юнитов придут одним эвентом, что явно быстрее, чем 100 раз обработать другой эвент.

 

Ну и небольшое замечание:

EVENT_UNITS_CHANGED и EVENT_UNIT_SPAWNED приходят на старте аддона только при входе в игру. Если аддон перезагрузить вручную, то для уже существующих юнитов вы этих сообщений не дождетесь.

Определять, что аддон был перезагружен вручную, можно по функции avatar.IsExist() (при входе в игру аватара не существует, равно как и прочих юнитов).

Список уже существующих юнитов можно получить из функции avatar.GetUnitList()

Ссылка на комментарий
Поделиться на другие сайты

Чтобы добиться параллельности, надо для этого что-то сделать (написать соответствующий код). Ваше "возможно" говорит о том, что на данный момент не сделано ничего :)

 

Вот это и интересно. Механизм событий позволит добиться параллельности или нет. Я понимаю, что через for я отправлю последовательно несколько событий. А вот как обработчик событий поведет. Запустит каждое по мере поступления или  параллельно :) Если нет, то конечно лучше 1-ый вариант...

Ссылка на комментарий
Поделиться на другие сайты

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

 

Но что касается аллодов - нельзя быть уверенным в чем-то абсолютно на 100%.

Ссылка на комментарий
Поделиться на другие сайты

Вот это и интересно. Механизм событий позволит добиться параллельности или нет. Я понимаю, что через for я отправлю последовательно несколько событий. А вот как обработчик событий поведет. Запустит каждое по мере поступления или  параллельно :) Если нет, то конечно лучше 1-ый вариант...

Не будет никакой параллельности, не надо морочить себе голову. Пишите меньше и проще, и будет меньше проблем в дальнейшем.

Ссылка на комментарий
Поделиться на другие сайты

Вот это и интересно. Механизм событий позволит добиться параллельности или нет. Я понимаю, что через for я отправлю последовательно несколько событий. А вот как обработчик событий поведет. Запустит каждое по мере поступления или параллельно :) Если нет, то конечно лучше 1-ый вариант...

На данный момент параллельности нету в принципе.

И вряд ли будет для пользовательских аддонов.

Ссылка на комментарий
Поделиться на другие сайты

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Восстановить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...

Важная информация

Пользуясь сайтом, вы принимаете Условия использования