Código :
package cfx.Efectos{
import flash.events.*;
import flash.display.*;
import flash.filters.*;
import flash.geom.*;
import flash.utils.*;
import flash.net.*;
import fl.transitions.Tween;
import fl.transitions.easing.*;
import cfx.CfxEvent.*;
public class FxAgua extends MovieClip {
private var Ancho:Number;
private var Alto:Number;
private var FondoA;
private var FondoB;
private var PunOrig;
private var Contenedor;
private var Ola;
private var Agua;
private var Onda;
private var Bmp:Bitmap;
private var _Mc:MovieClip=new MovieClip();
private var Imagen:BitmapData;
private var ImagenTemp;
private var _INT
public function FxAgua(ImagenBD:BitmapData ,INT:Number=1,McContenedor:MovieClip=null):void {
_INT=INT
if (McContenedor is MovieClip) {
_Mc=McContenedor;
}
addChild(_Mc);
Imagen=ImagenBD;
Ancho= Imagen.width;
Alto =Imagen.height;
ImagenTemp=new BitmapData(Ancho,Alto, false,0)
ImagenTemp.draw(ImagenBD);
FondoB = new BitmapData(Ancho,Alto, false,0);
FondoA= new BitmapData(Ancho,Alto);
PunOrig = new BitmapData(Ancho,Alto, false,128);
Contenedor = new BitmapData(Ancho,Alto, false,128);
Ola = new ConvolutionFilter(3,3,[1,1,1,1,1,1,1,1,1],9,0);
Agua = new ColorTransform(0,0,0.996,1,0,0,2,0);
Onda = new DisplacementMapFilter(FondoA,new Point(),4,4,INT,INT,"ignore");
Bmp= new Bitmap(FondoB);
_Mc.addChild(Bmp);
}
private function InicioEfect(event:Event) {
FondoA.applyFilter(PunOrig,new Rectangle(0, 0, Ancho,Alto),new Point(),Ola);
FondoA.draw(FondoA,new Matrix(),null,"add");
FondoA.draw(Contenedor,new Matrix(),null, "subtract");
FondoA.draw(FondoA, new Matrix(),Agua);
FondoB.applyFilter(Imagen,new Rectangle(0,0,Ancho,Alto), new Point(),Onda);
Contenedor = PunOrig;
PunOrig = FondoA.clone();
}
private function PuntoOnda(PX=NaN,PY=NaN):void {
var XM = PX;
var YM = PY;
PunOrig.setPixel(XM+1,YM,0);
PunOrig.setPixel(XM-1,YM,0);
PunOrig.setPixel(XM,YM+1,0);
PunOrig.setPixel(XM,YM-1,0);
PunOrig.setPixel(XM+1,YM+1,0);
PunOrig.setPixel(XM-1,YM-1,0);
}
public function start() {
_Mc.addEventListener(Event.ENTER_FRAME,InicioEfect);
point();
}
public function Stop() {
_Mc.removeEventListener(Event.ENTER_FRAME,InicioEfect);
}
public function reset() {
_Mc.removeEventListener(Event.ENTER_FRAME,InicioEfect);
// aui tengo el problema que no puedo resolver
Imagen=ImagenTemp
}
public function point(X=NaN,Y=NaN) {
PuntoOnda(X,Y);
}
/*public function efecto(tiemp,trancicion) {
PuntoOnda(X,Y);
}*/
}
}y para activarla en el fla lo hago asi
Código :
import cfx.Efectos.*
var MiBitmapData:BitmapData=new BitmapData(imagen.width,imagen.height,true,0)
MiBitmapData.draw(imagen)
var NuevoFXAgua=new FxAgua(MiBitmapData ,20,null)
addChild(NuevoFXAgua);
NuevoFXAgua.start()
addEventListener(MouseEvent.MOUSE_MOVE,hh)
addEventListener(MouseEvent.MOUSE_DOWN,re)
addEventListener(MouseEvent.MOUSE_UP,res)
function hh(e:Event){
NuevoFXAgua.point(mouseX,mouseY)
}
function re (e:Event){
NuevoFXAgua.reset()
}
function res (e:Event){
NuevoFXAgua.start()
}alguna sugerencia bienvenida sea XDXD
