«Стёрка» во Flash четверг
18 октября
Для создания заставки к проекту потребовалось реализовать «стирание» мягкой кистью верхнего слоя и плавное проявление нижнего, чтобы автомобиль на иллюстрации ниже вновь обрёл первозданный вид. Данный эффект очень похож на работу инструмента Eraser Tool (стёрка) в графическом редакторе Adobe Photoshop. Постараемся создать его аналог. можно посмотреть пример.
Тем, кто близко знаком с Flash, сразу станет ясно, что классическую маску
для этих целей использовать не получится. Существуют решения подобной проблемы
с помошью
Импортируем в пустой проект готовые иллюстрации для каждого слоя и зададим
linkage идентификаторы «ImageFront» и «ImageBack», чтобы использовать
их в программе. Создадим
Все приготовления сделаны, можно переходить к главному — программной части. Расположим её в первом фрейме проекта. Нам потребуются некоторые стандартные классы Flash, добавим их через import:
import flash.display.BitmapData;
import flash.geom.Rectangle;
import flash.geom.Point;
import flash.geom.Matrix;
Загрузим из библиотеки иллюстрацию верхнего слоя и дополнительный битмап с аналогичными
размерами, который будем использовать в качестве «виртуального»
var bFront:BitmapData = BitmapData.loadBitmap("ImageFront");
var bFrontAlpha:BitmapData = new BitmapData(bFront.width, bFront.height, true, 0xFF000000);
Расположим на сцене иллюстрацию нижнего слоя, иллюстрацию верхнего слоя (чуть выше), а также нашу «стерку» (еще выше). «Стерку» сразу сделаем невидимой.
this.attachBitmap( BitmapData.loadBitmap("ImageBack") ,1);
this.attachBitmap(bFront, 2);
this.attachMovie("Brush", "Brush", 3, {_visible:false} );
Подготовим объекты, которые будут использоваться в операции копирования.
var rect:Rectangle = new Rectangle(0, 0, bFront.width, bFront.height);
var point:Point = new Point();
var matrix:Matrix = new Matrix();
Теперь самое интересное — делаем дубликат
bFrontAlpha.copyChannel(bFront, rect, point, 8, 1);
На событие onEnterFrame подключим функцию, которая при нажатии левой клавиши мыши
рисует
var MouseDown:Boolean = false
this.onMouseDown = function() { MouseDown = true }
this.onMouseUp = function() { MouseDown = false }
this.onEnterFrame = function () {
if (MouseDown) {
matrix.tx = this._xmouse
matrix.ty = this._ymouse
bFrontAlpha.draw(Brush, matrix);
bFront.copyChannel(bFrontAlpha, rect, point, 1, 8);
}
}
Основываясь на таком принципе можно оперировать цветовыми и
К статье прилагается данный пример
в исходном виде.
(Около 700 килобайт)
- Птах
29 ноября - Офигенно. Спасибо!
- Kr
1 декабря - А можно оптимизировать данный клип для работы в 6 или хотя бы в 7 версии плеера?
- Devil of design
4 декабря - Акуратненько. Приятненько. Больше примеров.
29 ноября