Развитие игровой вспышки
Текущее время: Сб фев 24, 2018 12:30 am

Часовой пояс: UTC + 3 часа [ Летнее время ]




Начать новую тему Ответить на тему  [ Сообщений: 90 ]  На страницу Пред.  1 ... 4, 5, 6, 7, 8, 9  След.
Автор Сообщение
 Заголовок сообщения: Re: Чистка кода. На сколько нужно быть перфекционистом?
СообщениеДобавлено: Чт июл 27, 2017 8:48 pm 
Не в сети

Зарегистрирован: Ср апр 06, 2011 12:31 pm
Сообщений: 2610
Откуда: Moscow
Сайт: http://stranger087.com
Smrdis писал(а):
Ну вот, без пула у тебя будет одна функция инициализации, а с пулом будет "allocate" и "apply many params". Причем "apply many params" будет содержать дополнительно код очистки объекта.


Дак это всё в одной функции содержится, так же как и без пула. Учитывая что создаются объекты только через фабрику, запутаться тут негде.
Очистка переменных с дефолтными значениями конечно нужна будет, если таковые есть, но интуиция мне подсказывает что ошибки в таком очень быстро всплывает при тестах. Учитывая что пул я создаю только для объектов которые часто создаются и уничтожаются.

Для тех которые редко уничтожаются, аналогичные функции содержат только код инстанциации и дестроя) И если их вдруг понадобится пулить, я легко в эти функции допишу пулинг))


Вернуться наверх
 Профиль Отправить e-mail  
 
 Заголовок сообщения: Re: Чистка кода. На сколько нужно быть перфекционистом?
СообщениеДобавлено: Чт июл 27, 2017 9:19 pm 
Не в сети
Аватар пользователя

Зарегистрирован: Ср сен 09, 2009 11:53 pm
Сообщений: 3089
Откуда: Брянск
Сайт: http://hypnocatstudio.com
Stranger087 писал(а):
Очистка переменных с дефолтными значениями конечно нужна будет, если таковые есть, но интуиция мне подсказывает что ошибки в таком очень быстро всплывает при тестах.

Вот тебе вполне реальный пример. Ты решаешь запулировать объекты класса Bullet. В процессе игры Bullet'ы иногда тают по альфе при помощи твинера. Поэтому в коде инициализации у тебя появляется что-то вроде bulletPicture.alpha = 1. Но бывают ситуации когда Bullet возвращается в пул, в момент, когда анимация таяния началась, но не успела закончиться и если такой Bullet быстро заспаунить, то alpha = 1, не сработает, т.к. твинер будет продолжать работу. В итоге имеем редко повторяющийся плавающий баг с невидимыми пулями.

Или, например, на Bullet чаэлдом добавляется блик, который сверкает и тает в нулевую альфу. Можно запросто забыть дописать в код инициализации Bullet'а кусок, который этот бличок будет удалять. Блик маленький и на перфоманс сильно не влияет. Но через 100 реюзов такого Bullet'а у тебя на сцене 100 прозрачных картинок жрущих производительность.

А если не юзать пулы, то такие баги не возможны в принципе :/.


Вернуться наверх
 Профиль Отправить e-mail  
 
 Заголовок сообщения: Re: Чистка кода. На сколько нужно быть перфекционистом?
СообщениеДобавлено: Чт июл 27, 2017 9:41 pm 
Не в сети

Зарегистрирован: Ср апр 06, 2011 12:31 pm
Сообщений: 2610
Откуда: Moscow
Сайт: http://stranger087.com
Smrdis писал(а):
Stranger087 писал(а):
Очистка переменных с дефолтными значениями конечно нужна будет, если таковые есть, но интуиция мне подсказывает что ошибки в таком очень быстро всплывает при тестах.

Вот тебе вполне реальный пример. Ты решаешь запулировать объекты класса Bullet. В процессе игры Bullet'ы иногда тают по альфе при помощи твинера. Поэтому в коде инициализации у тебя появляется что-то вроде bulletPicture.alpha = 1. Но бывают ситуации когда Bullet возвращается в пул, в момент, когда анимация таяния началась, но не успела закончиться и если такой Bullet быстро заспаунить, то alpha = 1, не сработает, т.к. твинер будет продолжать работу. В итоге имеем редко повторяющийся плавающий баг с невидимыми пулями.

Или, например, на Bullet чаэлдом добавляется блик, который сверкает и тает в нулевую альфу. Можно запросто забыть дописать в код инициализации Bullet'а кусок, который этот бличок будет удалять. Блик маленький и на перфоманс сильно не влияет. Но через 100 реюзов такого Bullet'а у тебя на сцене 100 прозрачных картинок жрущих производительность.

А если не юзать пулы, то такие баги не возможны в принципе :/.


При возврате объекта в пул, твины удаляются. Это даж не обсуждается. Tweener.removeAllTweensOf(bullet)
Блик будет видно в профайлере кадра, не страшный баг.


Вернуться наверх
 Профиль Отправить e-mail  
 
 Заголовок сообщения: Re: Чистка кода. На сколько нужно быть перфекционистом?
СообщениеДобавлено: Чт июл 27, 2017 9:52 pm 
Не в сети
Аватар пользователя

Зарегистрирован: Ср сен 09, 2009 11:53 pm
Сообщений: 3089
Откуда: Брянск
Сайт: http://hypnocatstudio.com
!


Последний раз редактировалось Smrdis Чт июл 27, 2017 9:55 pm, всего редактировалось 1 раз.

Вернуться наверх
 Профиль Отправить e-mail  
 
 Заголовок сообщения: Re: Чистка кода. На сколько нужно быть перфекционистом?
СообщениеДобавлено: Чт июл 27, 2017 9:53 pm 
Не в сети
Аватар пользователя

Зарегистрирован: Ср сен 09, 2009 11:53 pm
Сообщений: 3089
Откуда: Брянск
Сайт: http://hypnocatstudio.com
Stranger087 писал(а):
При возврате объекта в пул, твины удаляются. Это даж не обсуждается. Tweener.removeAllTweensOf(bullet)

Это если в твинере есть такой функционал. В Phaser'е, например, придется запоминать все твины в переменные и потом мочить их ручками в коде инициализации. А еще твины запросто могут висеть не на самом объекте, а на его частях.

Stranger087 писал(а):
Блик будет видно в профайлере кадра, не страшный баг.

Когда знаешь, где и что искать, то конечно не страшный.


Вернуться наверх
 Профиль Отправить e-mail  
 
 Заголовок сообщения: Re: Чистка кода. На сколько нужно быть перфекционистом?
СообщениеДобавлено: Чт июл 27, 2017 10:02 pm 
Не в сети

Зарегистрирован: Ср апр 06, 2011 12:31 pm
Сообщений: 2610
Откуда: Moscow
Сайт: http://stranger087.com
Smrdis писал(а):
Это если в твинере есть такой функционал. В Phaser'е, например, придется запоминать все твины в переменные и потом мочить их ручками в коде инициализации. А еще твины запросто могут висеть не на самом объекте, а на его частях.

Если в твинере нет такого функционала, то это херовый твинер. Его надо либо дописать, либо взять другой. Кстати, ядро твинеров устроено совсем не сложно, и дописать такую штуку можно за 10 минут.

Smrdis писал(а):
Когда знаешь, где и что искать, то конечно не страшный.

Ну, тормозит игра, заходишь в профайлер отрисовки и играешь, видишь что отрисовывается 100 бликов когда на экране их нет. Ага, значит тормозят блики) Любые баги влияющие на производительность ловятся профайлером легко. Даже если их вообще не видно.

Я как-то раз поймал баг за одним говнокодером, который при выходе из матч3 удалял анимацию из списка отображения, но не удалял из энтерфреймера. В итоге через 10-15 заходов на мач3 экран игра начинала тормозить))) В профайлере было видно что тормоза вызываются на апдейте анимации, ну я зашел в аниматор и посмотрел список всех активных анимаций. Там было 15 вот этих самых неудаленных, с названием boosterHint ))


Вернуться наверх
 Профиль Отправить e-mail  
 
 Заголовок сообщения: Re: Чистка кода. На сколько нужно быть перфекционистом?
СообщениеДобавлено: Чт июл 27, 2017 10:27 pm 
Не в сети
Аватар пользователя

Зарегистрирован: Вс ноя 03, 2013 2:30 pm
Сообщений: 329
Да уже ребята, понятно теперь почему у вас по 2-3 тыс сообщений! :D


Вернуться наверх
 Профиль Отправить e-mail  
 
 Заголовок сообщения: Re: Чистка кода. На сколько нужно быть перфекционистом?
СообщениеДобавлено: Чт июл 27, 2017 11:08 pm 
Не в сети

Зарегистрирован: Вт дек 15, 2009 12:11 pm
Сообщений: 2019
Откуда: Samara, Russia
Так можно еще страниц десять спорить. Примерный сценарий:
A: А что если ситуация воспроизводится только при определенном способе игры? (например, мочить ракетами, на которых блики, босса на хилом железе - а тестеры это не делали на хилом железе)
B: Ну так тестировать нужно внимательно все сценарии!
A: А если на чайлдах внутри твинеры висят?
B: Ну так нужно поправить удалятель так, чтобы по всем чайлдам прошел!
A: А если объекты на события подписаны!
B: А нефиг на события подписывать пули отдельные.

Но, по-моему, очевидны две вещи:
- Да, пулы не ракетная наука. Все проблемы с ними можно решить.
- Нет, пулы делаются не за 0 минут 0 секунд. Можно с ними словить проблему initialize/cleanup на 5 минут, на час, а при должном сочетании невезения и на неделю (ну если в продакшен пролезет, и редко возникать будет).


Вернуться наверх
 Профиль Отправить e-mail  
 
 Заголовок сообщения: Re: Чистка кода. На сколько нужно быть перфекционистом?
СообщениеДобавлено: Чт июл 27, 2017 11:13 pm 
Не в сети
Аватар пользователя

Зарегистрирован: Ср сен 09, 2009 11:53 pm
Сообщений: 3089
Откуда: Брянск
Сайт: http://hypnocatstudio.com
А самый прикол в том, что преждевременная оптимизация в обмен на лишнюю работу, ухудшение читабельности и потенциальные баги взамен не дает ничего.


Вернуться наверх
 Профиль Отправить e-mail  
 
 Заголовок сообщения: Re: Чистка кода. На сколько нужно быть перфекционистом?
СообщениеДобавлено: Чт июл 27, 2017 11:23 pm 
Не в сети

Зарегистрирован: Ср апр 06, 2011 12:31 pm
Сообщений: 2610
Откуда: Moscow
Сайт: http://stranger087.com
Smrdis писал(а):
А самый прикол в том, что преждевременная оптимизация в обмен на лишнюю работу, ухудшение читабельности и потенциальные баги взамен не дает ничего.


Если брать каких нибудь жиббетсов где 5 пуль (стрел) на уровень, да еще и с бликами, то да.
А у меня в игре может быть до 700 пуль одновременно на экране, постоянно пересоздающихся и без бликов с твинерами. Я не тестил это без пулов на лоу энд девайсе, но уверен на 1000% что будет лагать)))


Вернуться наверх
 Профиль Отправить e-mail  
 
Показать сообщения за:  Сортировать по:  
Начать новую тему Ответить на тему  [ Сообщений: 90 ]  На страницу Пред.  1 ... 4, 5, 6, 7, 8, 9  След.

Часовой пояс: UTC + 3 часа [ Летнее время ]


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 7


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB