Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Регистрация Блоги Правила Справка Пользователи Календарь Поиск рулит! Сообщения за день Все разделы прочитаны
 

Вернуться   Форум Flasher.ru > Блоги > Котяра

Оценить эту запись

Нативный EventDispatcher в старлинге

Запись от Котяра размещена 27.11.2013 в 23:10
Обновил(-а) Котяра 27.11.2013 в 23:26

Запилил в очередной раз нативный диспатчинг - версия 2.
теперь ещё более нативный)
https://github.com/k0t0vich/Starling...ative-dispatch
https://github.com/k0t0vich/feathers...ative-dispatch
пример юзания
https://gist.github.com/k0t0vich/7642622

Пришлось отазаться от пулинга, но, имхо, это не так страшно.
Клонирование, хоть и есть, но только в баблинге и для тех объектов, у которых есть подписчики.

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

Особенности реализации:
1. useCapture не работает и шлёт Error

2. useWeakReference работает нормально - единственный баг - если его использовать, то
removeEventListeners не удалит этот листенер. Надо удалять вручную или понадеяться на GC.
Впрочем, это не коснётся старых проектов на старлинге, т.к. там вообще не было викреференсов.

3. Все листенеры должны иметь 1 параметр event.
Я исправил в физерсе и старлинге где юзались 0 или 2.
Но в своих проектах надо будет самим исправлять.

PS. ревью кода, комментарии, тесты, критика и прочие холивары категорически приветствуются.
Также, прошу помощи в переводе на инглиш этого опуса.
Надо написать на http://forum.starling-framework.org/...tcher-conflict
Всего комментариев 5

Комментарии

Старый 27.11.2013 23:53 fljot вне форума
fljot
Прости, весьма занят в эти дни, так что целиком не прокомментирую.

Но что на поверхности и бросается в глаза и о чём я "договорился" с Дэниелем — removeEventListeners в такой кривой реализации не нужен. Для тех кто не в теме — кривая она, потому что платформа кривая. Единственный способ хранить слабые ссылки — это класть их как ключи в Dictionary со слабыми ключами, но, минуя детали, суть дела в том, что они оттуда сразу удаляются. Так что раз мы не можем хранить все без исключения хэндлеры — то и не надо никого вводить в заблуждение такими кривыми removeEventListeners.

Пулинг обязательно нужен — TouchEvent'ов фигачится много и они бабблятся.

...
Старый 28.11.2013 00:29 Котяра вне форума
Котяра
 
Аватар для Котяра
Цитата:
Пулинг обязательно нужен — TouchEvent'ов фигачится много и они бабблятся.
Сейчас в старлинге пул не используется для тачей.
Обновил(-а) Котяра 28.11.2013 в 02:08
Старый 28.11.2013 11:36 Котяра вне форума
Котяра
 
Аватар для Котяра
Есть мысль завести частичный пулинг (кэширование) для метода dispatchEventWith, но для каждого объекта свой.
Плюс - если dispatchEventWith часто вызывается для одного и того же объекта - не будет пересоздаваться новый эвент.
Минус - кэшированый эвент будет жить до смерти объекта.
Старый 02.12.2013 22:25 dimarik вне форума
dimarik
 
Аватар для dimarik
Оч круто, Костя. Я уже прошел это.
И уже немного дальше пошел. Сделал два типа посетителя. Классический post-order и для своих айтем-рендереров в понятиях флекса -- level traversing посетителя. Заодно сообразил кеширование матриц трансформаций и ввел colorTransform для DisplayObject и их кеширование. Ща колдую над крутячим буфером aka main screen buffer, чтобы не плодить клоны ByteArray из VertexData в QuadBatch, а аплоадить только измененные вертексы. По сути QuadBatch, который создается в RenderSupport, не нужен.
Старый 12.12.2013 13:42 Котяра вне форума
Котяра
 
Аватар для Котяра
Дима, я знаю, что ты много чего накрутил поверх старлинга и физерса)
Я к тебе ещё зайду. Фишка была в том, чтобы законтрибутить реализацию. в Starling 2.0. Но видимо не судьба.
 

 


Часовой пояс GMT +4, время: 20:09.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2019, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.