Показать сообщение отдельно
Старый 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, увеличивается счетчик на еденицу
        } 
    } 
}