PDA

Просмотр полной версии : Программный blur в АС2. Возможно?


greep
21.10.2009, 14:28
Если да, то как?

Волгоградец
21.10.2009, 14:37
mc.filters = [new flash.filters.BlurFilter(10, 10, 3)];

Bitcoolman
21.10.2009, 19:49
А как плавное размытие?

mooncar
21.10.2009, 20:26
Плавно размываем мувик target_mc:
import flash.filters.BlurFilter;
var blur:BlurFilter = new BlurFilter(0, 0, 3);
var filterArray:Array = new Array();
filterArray[0]= blur;

function setBlur (mc:MovieClip, maxBlur:Number, stepsQuant:Number) {

var step:Number = maxBlur / stepsQuant;

if (!mc.countBlur) {
mc.countBlur = 0;
}

if (mc.countBlur < stepsQuant) {
mc.countBlur++;
blur.blurX = blur.blurY = step * mc.countBlur;
mc.filters = filterArray;
}
else {
clearInterval(BL);
mc.countBlur = 0;
}
}
BL = setInterval(setBlur, 20, target_mc, 100, 10);//старт применения блюра в 10 шагов с 0 до 100 с промежутком между шагами в 20 mc

greep
22.10.2009, 15:37
ООо) Спасибо! 2 mooncar: Только просьба еще одна, поясните пожалуйста что к чему... Если не трудно.

mooncar
22.10.2009, 16:02
Рассмотрим программный фильтр Blur:
public BlurFilter([blurX:Number], [blurY:Number], [quality:Number])
У него есть параметры
blurX
blurY
Они отвечают за размер размытия по соответственным ординатам.
Функция, работающая через интервал, пошагово меняет их значение от нуля до заданного в maxBlur и с заданным в setInterval временным шагом.
После изменения blur.blurX и blur.blurY нужно тут же заново применить фильтр к объекту (автоматически изменения не подействуют), что и делается в строке
mc.filters = filterArray;
На самом деле тут применяется весь набор возможных фильтров filterArray, а не только содержащийся в этом массиве фильр blur.

Что касается интервальной функции, то с ее помощью как раз периодически вызываем функцию изменения-переназначения фильтра.
В setInterval все, что идет после временного шага (собственно, интервала) - это аргументы, передаваемые вызываемой функци.

function setBlur (mc:MovieClip, maxBlur:Number, stepsQuant:Number)
......
setInterval(setBlur, 20, target_mc, 100, 10)

target_mc - это аргумент mc - имя мувика на сцене.
100 - это аргумент maxBlur - максимальное (конечное) размытие
10 - это аргумент stepsQuant - количество шагов, от него зависит плавность, так же как и от временного интервала

mc.countBlur - это счетчик, считающий количество уже сделанных шагов. Для удобства он определяется внутри объекта-мувика.

greep
22.10.2009, 16:44
Спасибо! Страна знает своих героев!

terve2
13.01.2010, 14:37
Подскажите пожалуйста, а как в данном примере плавно уменьшить блюр с 100 до 0?

mooncar
13.01.2010, 16:52
blur.blurX = blur.blurY = maxBlur - step * mc.countBlur;
Счетчик можно также оставить считать от 0 до 10 по возрастающей.
А еще можно сделать счетчик уменьшающимся с 10 до 0 при убирании блюра. Тогда можно написать универсальную функцию, позволяющую менять блюр с любого места - то есть если блюр увеличивался, но вызвали уменьшение, а блюр недоувеличился до конца, то с текущего места он пойдет до нуля. Для определения "текущего места", соответственного значению текущего блюра как раз можно использовать текущее значение счетчика блюра..

terve2
14.01.2010, 13:05
Спасибо, добрый человек. Дай Б-г вам здоровья