electroduendes.com

bitácora de un desarrollador interactivo

electroduendes.com header image 2

blur tween class

May 1st, 2006 · 4 Comments

Actualización: Esta clase es bastante antigua (2006 y as2). Recomiendo visitar la librería TweenMax si pretendes hacer blur mediante código.

Por aquí va una muy simple clase para hacer blurs (desenfocados) en Actionscript 2.o que hice hace tiempo, pensaba integrarla con las tweening ecuations, o con algún paquete de tweenings, pero por desidia no la he vuelto a tocar.

Antes de que coja polvo, o peor aún quede obsoleta, la libero, por si alguien se anima a mejorarla o le sirve de un aprieto.

Cositas estupendas de la clase:

- La velocidad se pasa en segundos, independiente del framerate

- Actionscript 2.0 & MTASC ready.

- Control de todos los argumentos de blurFilter. (blurx, blury, quality)

import mx.utils.Delegate;
/**
 * @author Alejandro Sánchez Marcos
 * @usage
 import com.electroduendes.tween.BlurTween;
 var blurTween:BlurTween = new BlurTween(mc);
 var initBlur:Object = {blurX:0, blurY:0, quality:3};
 var finalBlur:Object = {blurX:50, blurY:5, quality:3};
 a.onRelease = function() {
 	blurTween.tween(initBlur, finalBlur, 1);
 };
 b.onRelease = function() {
 	blurTween.tween(finalBlur, initBlur, 1);
 };
*
*/
class com.electroduendes.tween.BlurTween {
 
	public var interval: Number = 40;
	private var filter:BlurFilter;
	private var blur_interval:Number;
	private var mc:MovieClip;
	private var quality : Number;
	private var counter : Number;
	private var iterations : Number;
	private var diferenceX:Number;
	private var diferenceY:Number;
 
	public function BlurTween(mc:MovieClip){
		this.mc = mc;
		filter = new BlurFilter();
	}
	public function tween(initBlur:Object, finalBlur:Object, seconds:Number) : Void {
		counter = 0;
		this.iterations = Math.ceil(seconds*1000/interval);
		// apply init blur
		filter.blurX = initBlur.blurX;
		filter.blurY = initBlur.blurY;
		filter.quality = initBlur.quality;
		mc.filters = [filter];
		// calculate difference
		diferenceX = finalBlur.blurX â??? initBlur.blurX;
		diferenceY = finalBlur.blurY â??? initBlur.blurY;
		this.quality = finalBlur.quality;
		// if we have something to blur or unblurâ?¦
		clearInterval(blur_interval);
		if (diferenceX!=0 && diferenceY!=0)
			blur_interval = setInterval(Delegate.create(this, applyTween), interval);
	}
	private function applyTween() : Void {
		counter++;
		filter.blurX += diferenceX/iterations;
		filter.blurY += diferenceY/iterations;
		filter.quality = quality;
		mc.filters = [filter];
		if (counter == iterations) clearInterval(blur_interval);
	}
}

[por aquí un ejemplo]

Está en ingles por mi propósito hace un año de empezar a codificar en este idioma. Sé que a los hispanohablantes nos cuesta algo trabajar con nombres de variables y comentarios en inglés, pero por contra tengo que decir que después de tener que pelearme con un ejemplo de un código que sólo encontré en un blog francés escrito en francés, al menos, por mayoría democrática debo acostumbrarme al inglés para el código que publico.

Tags: Actionscript 2.0 · Flash · Librerías, recursos

4 responses so far ↓

  • 1 soki // May 4, 2006 at 2:26 pm

    Muy chula tio, jeje, funciona de pm.

    1abrazo

  • 2 mauro // Sep 28, 2006 at 11:36 pm

    Muy bueno. Mas adelante voy a dejar aqui una clase para trabajar con perspectivas sobre una imagen, algo muy útil tambien.

    Saludos

  • 3 hi_mito // Nov 9, 2006 at 7:22 pm

    ke buena clase, se aprecia mucho,, ahora kisiera ke me despejen una dudas si es posible,, yo toy usando la clase asi:

    import BlurTween;(renombre la ruta a la clase dado ke no kise hacer carpetas ‘com.electroduendes.tween’ y no se otra forma de usarla sin carpetas :( )
    var blurTween:BlurTween = new BlurTween(mc);
    var initBlur:Object = {blurX:0, blurY:0, quality:3};
    var finalBlur:Object = {blurX:50, blurY:5, quality:3};
    var actualBlur:Object = {blurX:????, blurY:?????, quality:3};
    mc.onRollOver = function() {
    blurTween.tween(actualBlur, finalBlur, 1);
    };
    mc.onRollOut = function() {
    blurTween.tween(actualBlur, initBlur, 1);
    };
    //////////////
    entonces mi duda es,, como podria implementar la clase o aplicarla de forma ke el primer argumento de la funcion blurTween.tween() sea el estado actual del filtro???
    muchas gracias por adelantado

  • 4 Alex Sánchez // Nov 9, 2006 at 7:42 pm

    1. para usarla sin carpetas (es la mejor manera para qeu puedas portar y estructurar tu código), necesitarás alojar la clase en el directorio com.electroduendes.tween en la raíz donde está alojado tu .fla
    2. la clase no está preparada para lo que pides, con algún cambio sí podría hacerlo. Te recomiendo que uses para ello el paquete mcTween, mucho más completo.

    http://hosted.zeh.com.br/mctween/doc_xyblurto.html

    A ver si saco algo de tiempo y puedo adaptar la clase para lo que pides.
    Saludos!

Leave a Comment