Избранное сообщение

Очень вольный перевод статьи Designing to Succeed

Не так давно некий Tony Downey, геймдизайнер, опубликовал внушительную статью о разработке и игровом дизайне инди-игр. В ней он рассмотр...

четверг, 28 июня 2012 г.

Лёгкий способ бросить искать утечки

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

Окончательным решением еврейского вопроса для меня стала библиотека CasaLib. Самое главное, что она может - это предоставляет свои классы CasaSprite и CasaMovieClip, которые расширяют стандартные. А в этих кастомных классах есть замечательные методы типа removeAllChildrenAndDestroy(), которые в одиночку способны справиться с главной причиной тормозов большинства флешек. Стоит заметить, что по умолчанию в этих методах дети только удаляются, а не уничтожаются, плюс рекурсивный проход метода по детям выключен. Чтобы исправить ситуацию, надо отправить true и true в качестве аргументов метода или же просто найти в библиотеке эти функции и к чёрту переписать:
 removeAllChildrenAndDestroy(destroyChildren:Boolean = false, recursive:Boolean = false)
на:

  removeAllChildrenAndDestroy(destroyChildren:Boolean = true, recursive:Boolean = true ) 

Библиотека умеет ещё много чего полезного, но главное - теперь ко мне ночью не придут партиклы, контейнер которых я зверски убил... Потому что все до единого партиклы тоже убиты, муа-ха-ха!!!!11

4 комментария:

  1. А я пользуюсь фликселом, и самописными фабриками (с кэшом естественно). Уже год не сталкивался с проблемой утечки памяти. Все дело в архитектуре ;).

    ОтветитьУдалить
    Ответы
    1. А я руками всё делаю, ни на один фреймворк подсесть не удалось...

      Удалить
  2. Легче самому следить за всеми объектами на сцене, чем юзать чужие либы.

    ОтветитьУдалить
    Ответы
    1. Правильно, чужие либы для слабаков! И вообще надо писать свои движки, ага.

      Удалить