| screamge |
26.05.2007 03:50 |
Код:
import flash.filters.ColorMatrixFilter;
import mx.events.EventDispatcher;
import mx.utils.Delegate;
class Screamge.effects.Tint {
public var addEventListener:Function;
private var dispatchEvent:Function;
private var __mc:MovieClip;
private var __des:Number = 0.01;
private var __desaturation:Number = 0;
public function Tint(mc:MovieClip) {
EventDispatcher.initialize(this);
__mc = mc;
tinter ();
}
public function set des (num:Number):Void {
__des = num;
}
public function Back ():Void {
__mc.onEnterFrame = Delegate.create (this, this.BackTint)
}
private function BackTint ():Void {
__desaturation -= __des;
__mc.filters = new Array(getDesaturationFilter(__desaturation));
if (__desaturation <= 0){
delete __mc.onEnterFrame;
dispatchEvent ({type:'onFinish'})
}
}
private function getDesaturationFilter(t) {
t = t ? t : 1;
var r:Number = 0.212671;
var g:Number = 0.715160;
var b:Number = 0.072169;
return new ColorMatrixFilter([t*r+1-t, t*g, t*b, 0, 0, t*r, t*g+1-t, t*b, 0, 0, t*r, t*g, t*b+1-t, 0, 0, 0, 0, 0, 1, 0]);
}
private function tinter():Void {
__mc.onEnterFrame = Delegate.create (this, this.onEnterHandle);
}
private function onEnterHandle ():Void {
__desaturation += __des;
__mc.filters = new Array(getDesaturationFilter(__desaturation));
if (__desaturation >= 1){
delete __mc.onEnterFrame;
dispatchEvent ({type:'onFinish'});
}
}
}
Взяв за основу код iNils -a написал класс, если он не против то пусть будет здесь. разбирайтесь.
Класс делает фотографию чёрно-белой, а также возвращает посредством вызова метода в обычное состояние.
Кстати вами написанная функция мало чем отличается от кода про который я говорил, вроде одно и тоже, разница есть маленькая - тот работает, а этот нет.
|