Estos efectos simulan el reflejo de una imagen sobre el agua. De ese modo, puedes crear cualquier imagen y se generarán las ilusiones del reflejo de un lago, del paso de un río o el estar detrás de una cascada. Está basado en la combinación de PerlinNoise con el desplazamiento de mapa de bits. De este modo podemos simular desde un tranquilo lago, hasta aguas torrenciales y cascadas.
En este ejemplo necesitamos solamente la imagen a reflejar vinculada en la biblioteca con el nombre "imagen".
En su forma simple dicho reflejo es uniforme y no presenta profundidad en la distancia. Para dotarle de relieve, hacemos una división de la imagen en tres partes de 1/6, 2/6(1/3) y 3/6(1/2) y aplicamos los desplazamientos y filtros independientemente.
Veamos estos tres ejemplos y la explicación de sus parámetros más significativos.
Efecto lago:
Código :
import flash.display.*;
import flash.geom.*;
import flash.filters.*;
img = BitmapData.loadBitmap("imagen");
w = img.width;
h = img.height;
attachBitmap(img, 1);
createEmptyMovieClip("sal", 0);
sal.attachBitmap(img, 1);
sal._y = 2*img.height;
sal._yscale = -100;
pt1 = new Point();
pt2 = new Point();
pt3 = new Point();
Mx = new Matrix();
ola1 = new BitmapData(w, h/6);
ola2 = new BitmapData(w, h/3);
ola3 = new BitmapData(w, h/2);
dM1 = new DisplacementMapFilter(ola1, new Point(0, 0), null, 4, 0, 20, "clamp");
dM2 = new DisplacementMapFilter(ola2, new Point(0, h/6), null, 4, 0, 50, "clamp");
dM3 = new DisplacementMapFilter(ola3, new Point(0, h/2), null, 4, 0, 120, "clamp");
onEnterFrame = function () {
pt1.y -= .2;
pt2.y -= .4;
pt3.y -= .8;
ola1.perlinNoise(0, 2, 1, 0, true, true, 4, true, [pt1]);
ola2.perlinNoise(40, 4, 2, 0, true, true, 4, true, [pt2]);
ola3.perlinNoise(80, 8, 1, 0, true, true, 4, true, [pt3]);
sal.filters = [dM1, dM2, dM3];
};Para ajustar a nuestras necesidades el efecto podemos variar los parámetros siguientes:
20, 50 y 120 de dM1, dM2 y dM3 para desplazar la escala Y del reflejo.
Los valores pt .y que dan la velocidad a las olas.
Los 3 primeros valores del perlinNoise para dar la agitación de las olas y el valor tercero de cada Perlin entre 1 y 5 para dotar de mayor "espejo" a cada zona al afinar por más octavas.
También podemos hacer que los tres tipos de ola se "solapen" más entre sí variando su tamaño y el punto de inclusión en el desplazamiento.
Para ondas lineales simplemente pondremos a 0 los primeros valores (x) de cada perlinNoise.
Efecto rio:
En este caso modificamos en cada frame no solo el perlin en Y sino también en X consiguiendo un movimiento lateral que simula un arroyo. Solo utilizamos un desplazamiento aunque podemos hacerlo como en el caso del lago y variar X e Y a tres velocidades para dar más sensación de profundidad si fuera necesario.
Código :
import flash.display.BitmapData;
import flash.geom.*;
import flash.filters.*;
img = BitmapData.loadBitmap("imagen");
attachBitmap(img, 1);
createEmptyMovieClip("sal", 0);
sal.attachBitmap(img, 0);
sal._y = 2*img.height;
sal._yscale = -100;
ola = new BitmapData(img.width, img.height);
pt = new Point();
dM = new DisplacementMapFilter(ola, new Point(), 1, 1, 0, 40, "ignore");
onEnterFrame = function () {
pt.y -= .3;
pt.x -= 1.7;
ola.perlinNoise(20, 4, 1, 0, true, true, 1, true, [pt]);
sal.filters = [dM];
};Efecto cascada:
Utilizamos un código similar al usado para el lago con tres niveles pero sin hacer espejo de la imagen y ajustamos los parámetros:
Código :
import flash.display.*;
import flash.geom.*;
import flash.filters.*;
img = BitmapData.loadBitmap("imagen");
w = img.width;
h = img.height;
createEmptyMovieClip("sal", 0);
sal.attachBitmap(img, 1);
pt1 = new Point();
pt2 = new Point();
pt3 = new Point();
ola1 = new BitmapData(w, h/6);
ola2 = new BitmapData(w, 3+h/30);
ola3 = new BitmapData(w, 4*h/5);
dM1 = new DisplacementMapFilter(ola1, new Point(), null, 4, 0, 20, "clamp");
dM2 = new DisplacementMapFilter(ola2, new Point(0, h/6), null, 4, 30, 50, "clamp");
dM3 = new DisplacementMapFilter(ola3, new Point(0, h/5-3), null, 4, 0, 90, "clamp");
onEnterFrame = function () {
pt1.y -= .4;
pt2.y -= 2.5;
pt3.y -= 3;
ola1.perlinNoise(4, 2, 1, 0, false, true, 4, true, [pt1]);
ola2.perlinNoise(8, 4, 1, 0, false, true, 4, true, [pt2]);
ola3.perlinNoise(3, 7, 1, 0, false, true, 4, true, [pt3]);
sal.filters = [dM3, dM2, dM1];
};Para ampliaciones, dudas y comentarios sobre estos efectos consultar en este post:
¿Cómo lograr un efecto de agua?
Para más información del uso de estos efectos, puedes ver otros:
- Efecto de relieve en imagenes con Flash
- Efecto de nubes en Flash
- Efecto de agua en Flash
- Efecto de bandera en imagenes con Flash
- Efecto cristal en imagenes con BitmapData en Flash 8

Por Rafeo el 13 de Febrero de 2007
Por AaronDark el 13 de Febrero de 2007
Por marcioangel el 13 de Febrero de 2007
Por jomajudo el 13 de Febrero de 2007
No sobrecargaría menos el computador si cargaras las clases justas y necesarias?
Al compilarse el swf solo coge las que realmente usas. Mira la referencia de Adobe:
Gracias de nuevo Te!
Por Rubencho176 el 13 de Febrero de 2007
Por Eliel el 13 de Febrero de 2007
....La tengo que afinar y añadir alguna cosilla de transiciones para ponerla aquí de tip pero me gusta como funciona por ahora.
Por eveevans el 14 de Febrero de 2007
ya habia visto este efecto en unos protectores de pantalla y siempre me quedo la duda como hacian ese efecto
Teseo , tienes pagina web cual es la direccion???
Por gorky el 14 de Febrero de 2007
Por chaves el 14 de Febrero de 2007
Me han encantado los 3 efectos, quizá el de la cascada algo menos, pero supongo que es plan de ajustarla a mi gusto y elegir una foto chula.
be water my friends
Por scx7 el 14 de Febrero de 2007
Por DoMEnIcA!! el 14 de Febrero de 2007
Por Mr Chud el 14 de Febrero de 2007
Por FlasherMx el 14 de Febrero de 2007
Por Daniel H el 15 de Febrero de 2007
Código :
import flash.display.BitmapData; import flash.geom.*; import flash.filters.*; img = BitmapData.loadBitmap("imagen"); attachBitmap(img, 1); createEmptyMovieClip("sal", 0); sal.attachBitmap(img, 0); sal._y = 2*img.height; sal._yscale = -100; ola = new BitmapData(img.width, img.height); pt = new Point(); dM = new DisplacementMapFilter(ola, new Point(), 1, 1, 0, 40, "ignore"); sal.cacheAsBitmap = true; setInterval(this, "efectoLago", 100); efectoLago = function () { pt.y -= .3; pt.x -= 1.7; ola.perlinNoise(20, 4, 1, 0, true, true, 1, true, [pt]); sal.filters = [dM]; };Lo mejor forma de implementerlos en una aplicación concreta, (tanto este como los otros efectos que usan desplazamiento+perlin) es con setInterval.
En la corrección que posteé en el efecto de agua para que se detuviera completamente ( ese esel código final que yo uso, no el ejemplo) ya advertía que la mejor manera era con setInterval y así está en ese código.
Además, su uso como función permite manejar el lapso como variable cosa muy util en ciertas ocasiones acelerando o ralentizando el efecto al gusto.
Toy d´acuerdo
Por champydelico el 16 de Febrero de 2007
Por el el 17 de Febrero de 2007
Por josluigtz el 18 de Febrero de 2007
Por Komotuporaki el 21 de Febrero de 2007
Por Boris el 22 de Febrero de 2007
1) Poner la imagen en la biblioteca del FLA. y vincularla con el nombre "imagen" OJO : vincularla no es ponerla en el escenario. Colocar u MC, gráfico o botón en el Escenario y darle nombre de instancia es "instanciar", no es "vincular para attach".
Instrucciones para vincular una imagen que está en la biblioteca:
1) En la biblioteca pones una imagen llamada digamos "paisaje".
2) Pinchas con ratón derecho sobre su icono en la biblioteca.
3) Pinchas en vinculación en el menú que aparece.
4) En la ventana que sigue: Propiedades de vinculación marcas Exportar para ActionScript , marcará también Exportar en primer fotograma, déjalo marcado. En identificador pon imagen (ese es el nombre que buscará el script para cargarlo en attach). Deja la entrada de Clase AS2 en blanco. pulsa Aceptar. Si todo ha ido bien, en las columnas de la biblioteca verás: nombre, tipo, nº de usos, y en vinculación la palabra imagen.
2) Colocar el código en acciones del primer frame.
YA ESTA!!
Si es el caso modificar algunos parametros que se deseen al gusto. El codigo hace todo lo necesario para duplicar la imagen, colocarla..espejarla etc...
Y repito: para consultas hay un post donde hacerlas ya indicado arriba en el ejemplo.
Por G Creator el 23 de Febrero de 2007
Por Jose Manuel el 23 de Febrero de 2007
http://www.isspal.com
Por nemesis el 23 de Febrero de 2007
Tienes mucho talento.
Por hdm el 02 de Marzo de 2007
Pero entonces no hay imagen que cargar.
Forma sencilla:
Pones el MC en el escenario con nombre de instancia digamos efectola.
y cambias este trozo de código:
Código :
img = BitmapData.loadBitmap("imagen");Por este otro:
Código :
El resto igual y ya lo tienes. no te olvides de hacer no visible la instancia de efectoola. Es más despues del código la puedes hasta borrar si quieres.
Por SoulGothic el 20 de Abril de 2007
Por mario el 22 de Abril de 2007
Por joshuavw el 17 de Mayo de 2007
Por Edg@rNet el 29 de Mayo de 2007
Por gladys el 28 de Junio de 2007
Por alvaro el 02 de Julio de 2007
Por alvaro el 02 de Julio de 2007
Por Rubí el 07 de Julio de 2007
Por Criss el 18 de Julio de 2007
Por Criss el 18 de Julio de 2007
mil gracias
Por nikolas el 18 de Julio de 2007
Por erika el 30 de Julio de 2007
Por Ana el 13 de Septiembre de 2007
Quiero este efecto de fondo,pero no me permite poner encima ni texto ni nada... ya probè cargandolo como movie externa en otro archivo, y tampoco, y no pude cargarla por ej en el nivel 0 y despuès cargar el texto en, por ej, el nivel 3... que puedo hacer?
gracias.
Por Ana el 13 de Septiembre de 2007
Por Dayanne el 17 de Septiembre de 2007
Me podria alguien explicar por favor.
Por Marissa el 25 de Septiembre de 2007
Por Luisina el 29 de Septiembre de 2007
Muchas gracias por su ayuda!
Por Luisina el 29 de Septiembre de 2007
Me pueden explicar paso a paso de como hacer el efecto? No entiendo la vinculacion de la imagen. AYUDA POR FAVOR!
Mi mail es: l_llopez@yahoo.com.ar
Muchas gracias!
Por Ferc el 01 de Noviembre de 2007
Muy agradecido por este tutorial, bye.
Por Ferc, visualiza@h el 01 de Noviembre de 2007
Por visualiza@hotmail.co el 01 de Noviembre de 2007
Por Luis Vera el 24 de Noviembre de 2007
Por we el 05 de Diciembre de 2007
Por Pancho el 22 de Diciembre de 2007
Por fench el 14 de Febrero de 2008
puedes explicar mejor la parte 'división de la imagen en tres partes de 1/6, 2/6(1/3) y 3/6(1/2) y aplicamos los desplazamientos y filtros independientemente' es que soy novato y no entiendo.
gracias
Por jaime el 05 de Marzo de 2008
Por jaime el 05 de Marzo de 2008
Por frameva el 27 de Mayo de 2008
Me parecen unos efectos excelentes y me gustaria poner estos efectos a unas fotos mias, el problema es que no se na de computacion agradecere si algien me gia paso por paso, muchisimas gracias y felicidades.
expertos ayuda.
Por frameva el 27 de Mayo de 2008
frameva@yahoo.con.mx
Por marcelo-vercillo el 16 de Junio de 2008
Ahora, yo utilicé el efecto del lago, me salió ok, pero quiciera superponer a la imagen un marco transparente (solo el contorno) ya sea un png o vectores.
Como puedo hacerlo, el attach no me salió, pero creo que por errores de sintaxis.
Alguien me ayuda?
gracias
Por Pablo el 02 de Julio de 2008
Por Pablo el 02 de Julio de 2008
Por cintia el 08 de Julio de 2008
Por ivan el 10 de Septiembre de 2008
Por jaz el 14 de Septiembre de 2008
Por wsebastian el 07 de Noviembre de 2008
Por juan mu;oz el 03 de Diciembre de 2008
Por grado13 el 04 de Diciembre de 2008
Por Matias el 24 de Enero de 2009
Matias-blog :
Por Giga el 11 de Febrero de 2009
Por Giga el 12 de Febrero de 2009
Por carlos el 06 de Marzo de 2009
Por carlos el 06 de Marzo de 2009
Por BIODEMON el 27 de Mayo de 2009
- Si anexo mas Capas con animaciones, textos, graficos, etc.
Pork que no me las muestra estas Capas, si el efecto de lago esta debajo de estas capas; en el caso de Aplicar este efecto como una fondo o backgrond, para al alguna multimedia.
- O si es mejor o debido hacer load movies?
Agradesco antemano que meatuden enla duda!
Gracias
Por Zeus el 14 de Junio de 2009
Por Griva el 18 de Agosto de 2009
Por diego alexander el 28 de Noviembre de 2009
import flash.display.*;
import flash.geom.*;
import flash.filters.*;
img = BitmapData.loadBitmap("imagen");
w = img.width;
h = img.height;
createEmptyMovieClip("sal", 0);
sal.attachBitmap(img, 1);
pt1 = new Point();
pt2 = new Point();
pt3 = new Point();
ola1 = new BitmapData(w, h/6);
ola2 = new BitmapData(w, 3+h/30);
ola3 = new BitmapData(w, 4*h/5);
dM1 = new DisplacementMapFilter(ola1, new Point(), null, 4, 0, 20, "clamp");
dM2 = new DisplacementMapFilter(ola2, new Point(0, h/6), null, 4, 30, 50, "clamp");
dM3 = new DisplacementMapFilter(ola3, new Point(0, h/5-3), null, 4, 0, 90, "clamp");
onEnterFrame = function () {
pt1.y -= .4;
pt2.y -= 2.5;
pt3.y -= 3;
ola1.perlinNoise(4, 2, 1, 0, false, true, 4, true, [pt1]);
ola2.perlinNoise(8, 4, 1, 0, false, true, 4, true, [pt2]);
ola3.perlinNoise(3, 7, 1, 0, false, true, 4, true, [pt3]);
sal.filters = [dM3, dM2, dM1];
};
Por Admins el 01 de Diciembre de 2009
Asi que mejor pon la URL para ver los pro y contra del codigo que dices y recien ahi podremos ayudarte.
Espero haber sido claro y espero que respondas.
Saludos
Por diego alexander el 04 de Diciembre de 2009
pero parece que ya no esta, como le mandaria el video del tutorial a ustedes para que lo miren.
gracias DIOS los bendiga
Por lisbeth el 19 de Junio de 2010
Por ENRRIQUETA el 27 de Junio de 2010
Por Angel Alvarado el 06 de Agosto de 2010
Por JinGT el 07 de Diciembre de 2010
EFECTO LAGO
import flash.display.*;
import flash.geom.*;
import flash.filters.*;
import flash.events.MouseEvent;
import flash.events.Event;
function ImagenToBitmap(NombreImagenBiblioteca:String):Bitmap
{
var nombre:String = NombreImagenBiblioteca;
var Clase:Class = getDefinitionByName(nombre) as Class;
var tBitmapData:BitmapData =new Clase(100,100);
//var bd:BitmapData = new BitmapData(myMC.width, myMC.height, true,0xFFFFFFFF);
//bd.draw(myMC);
var tBitmap:Bitmap = new Bitmap(tBitmapData);
//trace("Bitmap Alto " + b.height);
//trace("Bitmap Ancho " + b.width);
return tBitmap;
}
//convierte una imagen de biblioteca a BitmapData
function ImagenToBitmapData(NombreImagenBiblioteca:String):BitmapData
{
var nombre:String = NombreImagenBiblioteca;
var Clase:Class = getDefinitionByName(nombre) as Class;
var tBitmapData:BitmapData =new Clase();//new Clase(100,100);
return tBitmapData;
}
var img:BitmapData = ImagenToBitmapData("imagen");
var w:int = img.width;
var h:int = img.height;
addChild(new Bitmap(img));
var sal:MovieClip =new MovieClip ();
//createEmptyMovieClip("sal", 0);
//sal.attachBitmap(img, 1);
addChild(sal);
sal.addChild(new Bitmap(img));
sal.y = 2*img.height;
sal.scaleY = -1;
pt1 = new Point();
pt2 = new Point();
pt3 = new Point();
Mx = new Matrix();
ola1 = new BitmapData(w, h/6);
ola2 = new BitmapData(w, h/3);
ola3 = new BitmapData(w, h/2);
//dM1 = new DisplacementMapFilter(ola1, new Point(0, 0), null, 4, 0, 20, "clamp");
//dM2 = new DisplacementMapFilter(ola2, new Point(0, h/6), null, 4, 0, 50, "clamp");
//dM3 = new DisplacementMapFilter(ola3, new Point(0, h/2), null, 4, 0, 120, "clamp");
dM1 = new DisplacementMapFilter(ola1, new Point(0, 0), 0, 4, 0, 20, "clamp");
dM2 = new DisplacementMapFilter(ola2, new Point(0, h/6), 0, 4, 0, 50, "clamp");
dM3 = new DisplacementMapFilter(ola3, new Point(0, h/2), 0, 4, 0, 120, "clamp");
this.addEventListener(Event.ENTER_FRAME,function ()
{
pt1.y -= .2;
pt2.y -= .4;
pt3.y -= .8;
ola1.perlinNoise(0, 2, 1, 0, true, true, 4, true, [pt1]);
ola2.perlinNoise(40, 4, 2, 0, true, true, 4, true, [pt2]);
ola3.perlinNoise(80, 8, 1, 0, true, true, 4, true, [pt3]);
sal.filters = [dM1, dM2, dM3];
});
EFECTO RIO
import flash.display.*;
import flash.geom.*;
import flash.filters.*;
import flash.events.MouseEvent;
import flash.events.Event;
function ImagenToBitmap(NombreImagenBiblioteca:String):Bitmap
{
var nombre:String = NombreImagenBiblioteca;
var Clase:Class = getDefinitionByName(nombre) as Class;
var tBitmapData:BitmapData =new Clase(100,100);
//var bd:BitmapData = new BitmapData(myMC.width, myMC.height, true,0xFFFFFFFF);
//bd.draw(myMC);
var tBitmap:Bitmap = new Bitmap(tBitmapData);
//trace("Bitmap Alto " + b.height);
//trace("Bitmap Ancho " + b.width);
return tBitmap;
}
//convierte una imagen de biblioteca a BitmapData
function ImagenToBitmapData(NombreImagenBiblioteca:String):BitmapData
{
var nombre:String = NombreImagenBiblioteca;
var Clase:Class = getDefinitionByName(nombre) as Class;
var tBitmapData:BitmapData =new Clase();//new Clase(100,100);
return tBitmapData;
}
var img:BitmapData = ImagenToBitmapData("imagen");
var w:int = img.width;
var h:int = img.height;
addChild(new Bitmap(img));
var sal:MovieClip =new MovieClip ();
//createEmptyMovieClip("sal", 0);
//sal.attachBitmap(img, 1);
addChild(sal);
sal.addChild(new Bitmap(img));
sal.y = 2*img.height;
sal.scaleY = -1;
ola = new BitmapData(img.width, img.height);
pt = new Point();
dM = new DisplacementMapFilter(ola, new Point(), 1, 1, 0, 40, "ignore");
this.addEventListener(Event.ENTER_FRAME,function ()
{
pt.y -= .3;
pt.x -= 1.7;
ola.perlinNoise(20, 4, 1, 0, true, true, 1, true, [pt]);
sal.filters = [dM];
});
EFECTO CASCADA
import flash.display.*;
import flash.geom.*;
import flash.filters.*;
import flash.events.MouseEvent;
import flash.events.Event;
function ImagenToBitmap(NombreImagenBiblioteca:String):Bitmap
{
var nombre:String = NombreImagenBiblioteca;
var Clase:Class = getDefinitionByName(nombre) as Class;
var tBitmapData:BitmapData =new Clase(100,100);
//var bd:BitmapData = new BitmapData(myMC.width, myMC.height, true,0xFFFFFFFF);
//bd.draw(myMC);
var tBitmap:Bitmap = new Bitmap(tBitmapData);
//trace("Bitmap Alto " + b.height);
//trace("Bitmap Ancho " + b.width);
return tBitmap;
}
//convierte una imagen de biblioteca a BitmapData
function ImagenToBitmapData(NombreImagenBiblioteca:String):BitmapData
{
var nombre:String = NombreImagenBiblioteca;
var Clase:Class = getDefinitionByName(nombre) as Class;
var tBitmapData:BitmapData =new Clase();//new Clase(100,100);
return tBitmapData;
}
var img:BitmapData = ImagenToBitmapData("imagen");
var w:int = img.width;
var h:int = img.height;
addChild(new Bitmap(img));
var sal:MovieClip =new MovieClip ();
//createEmptyMovieClip("sal", 0);
//sal.attachBitmap(img, 1);
addChild(sal);
sal.addChild(new Bitmap(img));
pt1 = new Point();
pt2 = new Point();
pt3 = new Point();
ola1 = new BitmapData(w, h/6);
ola2 = new BitmapData(w, 3+h/30);
ola3 = new BitmapData(w, 4*h/5);
dM1 = new DisplacementMapFilter(ola1, new Point(), 0, 4, 0, 20, "clamp");
dM2 = new DisplacementMapFilter(ola2, new Point(0, h/6), 0, 4, 30, 50, "clamp");
dM3 = new DisplacementMapFilter(ola3, new Point(0, h/5-3), 0, 4, 0, 90, "clamp");
this.addEventListener(Event.ENTER_FRAME,function ()
{
pt1.y -= .4;
pt2.y -= 2.5;
pt3.y -= 3;
ola1.perlinNoise(4, 2, 1, 0, false, true, 4, true, [pt1]);
ola2.perlinNoise(8, 4, 1, 0, false, true, 4, true, [pt2]);
ola3.perlinNoise(3, 7, 1, 0, false, true, 4, true, [pt3]);
sal.filters = [dM3, dM2, dM1];
});
Por CARLOS MONTERO el 24 de Febrero de 2011
Gracias.
Por si acaso mi correo es: mc_consultoria2002@yahoo.com
Por Armando el 10 de Noviembre de 2011
Por Freeman el 19 de Diciembre de 2011
El problema es que al reproducir la pelicula solo de queda en un lugar (en la esquina superior izquierda) es como si estuviera por default creo.
Gracias
Por Freeman el 26 de Diciembre de 2011
Era para saber si se realizar el efecto de lago con un movieclip que este en el escenario espero te respueta gracias