/potapenko.com/articles/conveyor (part 7)/

Конвейеры!

Скорее всего вы уже убедились в полезности и мощи использования конвейера. Трудно не убедится.

Но это еще не все. Мы работаем с одним общим конвейером для всех элементов приложения. А почему бы нам не использовать локальные конвейеры в своих компонентах? Мы можем значительно расширить их функциональность за счет конвейеров. И не всегда хорошо, что все действия идут друг за другом. Независимые процессы можно запускать параллельно в нескольких компонентах. При этом они могут синхронизироваться через главный конвейер.

Трудно отказаться от удобства конвейера при решении локальных задач в каждом компоненте. Там есть и анимация, и действия, которые не должны пересекаться.

Значит, необходимы конвейеры!

И нет ничего проще. При инициализации компонентов создадим локальный конвейер:


import com.potapenko.managers.Conv; 

this.Сonv = Conv.create(); 

И теперь компонент сможет работать со своим локальным конвейером и иметь доступ ко всем его методам: put, include, stop, play, anim.

Хотим сделать «мерцание» (blink) нашего компонента?

Нет ничего легче:


var a = [80, 50, 20, 50, 80, 100]; 

for (var i=0;ii<a.length;i++) 
{ 
  this.Conv.put(this, "_alpha", "1", a[i]); 
} 

Очевидно, что так, куда проще, чем через onEnterFrame.

А теперь сделаем blink , но чтобы головной конвейер нас «подождал».


Conv.stop();


var a = [80, 50, 20, 50, 80, 100]; 

for (var i=0;ii<a.length;i++) 
{ 
  this.Conv.put(this, "_alpha", "1", a[i]); 
}


this.Conv.put(Conv, "play", 0); 

Почти многопоточность.

Класс конвейера

На сегодняшний момент существует две версии конвейера: для AS 1.0 и AS 2.0. Вторая версия – обладает всем функционалом, описанным в данной статье. В первой версии отсутствуют некоторые анимационные возможности: длительность анимации и анимация по дуге, однако основной функционал присутствует.

Конвейер всех версий может работать во Flash-плеере, начиная с шестой версии.

Использование конвейера для АS2 :


import com.potapenko.managers.Conv;


class TestConveyor
{
  // ссылка на "главный" конвейер
  private var gConv = Conv.getInstace();
  
  // ссылка на "локальный конвейер 
  private var lConv = Conv.create();
  
  public function testMethod()
  {
    // используем главный конвейер
    gConv.put(trace, "hello, world!", 100);
    
    // используем локальный конвейер
    lConv.put(trace, "hello, world!", 100);
  }
}

В AS 2 версии, конвейер использует шаблон «Singleton», и доступ к главному конвейеру возможет только через ссылку, получаемую с помощью метода getInstance. Создание нового, локального конвейера, как описывалось выше, происходит с помощью метода create.

Использование конвейера в AS 1:


#include "com/potapenko/Conveyor/Conveyor.as"

Conv.put(trace, "hello, world!", 100);

Заключение

Желаю вам удачи на поприще конвейеризации своих приложений. Ну и под конец сформулируем еще раз, что дает технология конвейера:

  1. Создаются последовательности действий со своей продолжительностью во времени. И следующее действие может начаться только тогда, когда закончится предыдущее.
  2. Создание иерархических, вложенных списков. Один элемент может содержать (создать) еще список, элемент которого так же может создать еще список и т. д.
  3. Распределение вычислений во времени и, как следствие, уменьшение нагрузки на плеер. Приложение работает быстро и легко.
  4. Универсальная, гибкая и мощная технология анимации мувиклипов из точки в точку. По прямой и по дуге.
  5. Кроме общего (глобального) конвейера, создание собственных (локальных) конвейеров для каждого компонента. Конвейеры независимы друг от друга.
  6. Управление и синхронизация работы компонентов и их конвейеров через глобальный конвейер.
  7. Мы получили универсальную и мощную систему описания любой программной анимации во Flash. Мы будем «писать код во времени».

Вы можете загрузить механизм конвейера в разделе «framework» данного сайта.

В следующей статье, мы подробнее остановимся на тонкостях применения конвейера для создания анимации и описанию логики приложений
(статься готовится).

Предыдущая часть
[1] [2] [3] [4] [5] [6] [7]