Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Вектор в растр (http://www.flasher.ru/forum/showthread.php?t=209512)

neonoviiwolf 17.11.2014 19:28

Вектор в растр
 
Добрый день.
Возник вопрос по оптимизации, я сделал несколько мувиклипов в СС, в каждом мувики есть последовательность изображений, нарисованных в СС, как я понимаю это векторные рисунки, т.к. увеличив их в 50 раз, качество не пострадало. Во время запуска приложения создаётся два десятка копий мувиков, которые движутся по сцене и проигрываются, если увеличить количество, то начинаются просадки фпс, так же создаётся около 50 копий мувика статичных (только один кадр, но тоже движутся). Собственно возник вопрос, если всё это перевести в формат png, а затем запихнуть обратно в мувики (где проигрывается, то ряд картинок pbg) - это разгрузит ЦП? А то ещё много нужно добавить элементов, а уже притормаживает. Так же интересует реализация пула, собственно недавно программирую и понимаю как это должно быть, но не могу понять логику класса.

Если кто может, объясните построчно
Код AS3:

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;
        }
    }
}


Gerbert 17.11.2014 20:29

RastrMovieClip или свой велосипед

Capnmeth 18.11.2014 16:18

Да, это же векторные изображения, весит много.

vvm 11.12.2014 21:18

Прокомментировал:


Код AS3:

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, увеличивается счетчик на еденицу
        }
    }
}


neonoviiwolf 12.12.2014 05:55

vvm спасибо, но кажись я уже сделал пул), ну во всяком случаи половина кода есть, но я его сразу интегрирую в свою игрульку, проходится возиться)


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

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