LEM Posted April 21, 2018 Share Posted April 21, 2018 Не совсем ясно баг это или фича. Для виджетов, прикрепленных к MainScreenControl3D, событие EVENT_EFFECT_FINISHED приходит всем аддонам. Вроде бы ничего страшного. Так и есть, но бывают определенные трудности из-за этого. Для примера возьмем вот такой код: common.RegisterEventHandler(function(event) if event.effectType == ET_FADE then -- специально для примера виджет берется из event.wtOwner event.wtOwner:PlayFadeEffect(1, 0, 150, EA_SYMMETRIC_FLASH) end end, 'EVENT_EFFECT_FINISHED') widget:PlayFadeEffect(1, 0, 150, EA_SYMMETRIC_FLASH) Ну что здесь такого? Простая реализация бесконечного моргания виджета. Есть две проблемы: А что, если виджет будет уничтожен в процессе? Событие придет, но виджет перестанет быть валидным. Скорее всего мы получим ошибку. Если другой аддон запустит эффект для виджета, который прикреплен к MainScreenControl3D, то наш код заставит моргать и этот виджет. Эта заметка писалась больше для описания второй проблемы, но первая тоже вполне реальна. А еще можно было изначально не использовать виджет из event.wtOwner. Было бы не так фатально. Исправляем: common.RegisterEventHandler(function(event) if event.effectType == ET_FADE and event.wtOwner:IsValid() and event.wtOwner:IsEqual(widget) then -- специально для примера используется виджет из event.wtOwner event.wtOwner:PlayFadeEffect(1, 0, 150, EA_SYMMETRIC_FLASH) end end, 'EVENT_EFFECT_FINISHED') widget:PlayFadeEffect(1, 0, 150, EA_SYMMETRIC_FLASH) Quote Link to comment Share on other sites More sharing options...
Recommended Posts