![]() |
|
||||||||||
|
|
|
|||||
|
Регистрация: Jun 2014
Сообщений: 558
|
Добрый день.
Возник вопрос по оптимизации, я сделал несколько мувиклипов в СС, в каждом мувики есть последовательность изображений, нарисованных в СС, как я понимаю это векторные рисунки, т.к. увеличив их в 50 раз, качество не пострадало. Во время запуска приложения создаётся два десятка копий мувиков, которые движутся по сцене и проигрываются, если увеличить количество, то начинаются просадки фпс, так же создаётся около 50 копий мувика статичных (только один кадр, но тоже движутся). Собственно возник вопрос, если всё это перевести в формат png, а затем запихнуть обратно в мувики (где проигрывается, то ряд картинок pbg) - это разгрузит ЦП? А то ещё много нужно добавить элементов, а уже притормаживает. Так же интересует реализация пула, собственно недавно программирую и понимаю как это должно быть, но не могу понять логику класса. Если кто может, объясните построчно package { import flash.display.Sprite; public final class SpritePool { private static var MAX_VALUE:uint; private static var GROWTH_VALUE:uint; private static var counter:uint; private static var pool:Vector.<Sprite>; private static var currentSprite:Sprite; public static function initialize( maxPoolSize:uint, growthValue:uint ):void { MAX_VALUE = maxPoolSize; GROWTH_VALUE = growthValue; counter = maxPoolSize; var i:uint = maxPoolSize; pool = new Vector.<Sprite>(MAX_VALUE); while( --i > -1 ) pool[i] = new Sprite(); } public static function getSprite():Sprite { if ( counter > 0 ) return currentSprite = pool[--counter]; var i:uint = GROWTH_VALUE; while( --i > -1 ) pool.unshift ( new Sprite() ); counter = GROWTH_VALUE; return getSprite(); } public static function disposeSprite(disposedSprite:Sprite):void { pool[counter++] = disposedSprite; } } } |
|
|||||
|
Banned
Регистрация: Aug 2014
Сообщений: 461
|
|
|
|||||
|
Регистрация: May 2014
Сообщений: 54
|
Да, это же векторные изображения, весит много.
__________________
Деньги это бумажки радости... |
|
|||||
|
Регистрация: Aug 2001
Адрес: Rostov on Don
Сообщений: 2
|
Прокомментировал:
package { import flash.display.Sprite; // импорт класса Sprite // SpritePool - отрытый финальный(нет возможности наследовать от него) класс SpritePool public final class SpritePool { // приватные статичные переменные класса private static var MAX_VALUE:uint; private static var GROWTH_VALUE:uint; private static var counter:uint; private static var pool:Vector.<Sprite>; private static var currentSprite:Sprite; // открытая статическая функция класса принимает значения maxPoolSize и growthValue // void - ничего не возвращает // функция инициализации public static function initialize( maxPoolSize:uint, growthValue:uint ):void { MAX_VALUE = maxPoolSize; GROWTH_VALUE = growthValue; counter = maxPoolSize; var i:uint = maxPoolSize; pool = new Vector.<Sprite>(MAX_VALUE);// создать пул // пока --i больше -1 заталкивать в пул спрайты while( --i > -1 ) pool[i] = new Sprite(); } // открытая статическая функция getSprite, возвращает спрайты public static function getSprite():Sprite { //если счетчик больше 0 то возвратить текущий спрайт if ( counter > 0 ) return currentSprite = pool[--counter]; var i:uint = GROWTH_VALUE; // пока выполняется условие ( --i > -1 ) вставлять в начало pool новый спрайт while( --i > -1 ) pool.unshift ( new Sprite() ); /*unshift Метод unshift() вставляет один или более элементов в начало массива, при этом первый индекс всегда равен 0. */ counter = GROWTH_VALUE; return getSprite(); // рекурсия } // функция disposeSprite принимает disposedSprite типа Sprite // :void - функция ничего не возвращает public static function disposeSprite(disposedSprite:Sprite):void { pool[counter++] = disposedSprite; // заносится в pool Sprite, увеличивается счетчик на еденицу } } } |
|
|||||
|
Регистрация: Jun 2014
Сообщений: 558
|
vvm спасибо, но кажись я уже сделал пул), ну во всяком случаи половина кода есть, но я его сразу интегрирую в свою игрульку, проходится возиться)
Последний раз редактировалось neonoviiwolf; 12.12.2014 в 15:11. |
![]() |
![]() |
Часовой пояс GMT +4, время: 02:20. |
|
|
« Предыдущая тема | Следующая тема » |
|
|