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

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 17.11.2014, 19:28
neonoviiwolf вне форума Посмотреть профиль Отправить личное сообщение для neonoviiwolf Найти все сообщения от neonoviiwolf
  № 1  
Ответить с цитированием
neonoviiwolf

Регистрация: Jun 2014
Сообщений: 558
По умолчанию Вектор в растр

Добрый день.
Возник вопрос по оптимизации, я сделал несколько мувиклипов в СС, в каждом мувики есть последовательность изображений, нарисованных в СС, как я понимаю это векторные рисунки, т.к. увеличив их в 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; 
        } 
    } 
}

Старый 17.11.2014, 20:29
Gerbert вне форума Посмотреть профиль Найти все сообщения от Gerbert
  № 2  
Ответить с цитированием
Gerbert
Banned

Регистрация: Aug 2014
Сообщений: 461
RastrMovieClip или свой велосипед

Старый 18.11.2014, 16:18
Capnmeth вне форума Посмотреть профиль Отправить личное сообщение для Capnmeth Найти все сообщения от Capnmeth
  № 3  
Ответить с цитированием
Capnmeth
 
Аватар для Capnmeth

Регистрация: May 2014
Сообщений: 54
Да, это же векторные изображения, весит много.
__________________
Деньги это бумажки радости...

Старый 11.12.2014, 21:18
vvm вне форума Посмотреть профиль Отправить личное сообщение для vvm Посетить домашнюю страницу vvm Найти все сообщения от vvm
  № 4  
Ответить с цитированием
vvm

Регистрация: Aug 2001
Адрес: Rostov on Don
Сообщений: 2
Прокомментировал:


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

Старый 12.12.2014, 05:55
neonoviiwolf вне форума Посмотреть профиль Отправить личное сообщение для neonoviiwolf Найти все сообщения от neonoviiwolf
  № 5  
Ответить с цитированием
neonoviiwolf

Регистрация: Jun 2014
Сообщений: 558
vvm спасибо, но кажись я уже сделал пул), ну во всяком случаи половина кода есть, но я его сразу интегрирую в свою игрульку, проходится возиться)


Последний раз редактировалось neonoviiwolf; 12.12.2014 в 15:11.
Создать новую тему Ответ Часовой пояс GMT +4, время: 02:20.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

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

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


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


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