El cristal es un efecto de Bevel básicamente. Con este efecto lograremos que una imagen parezca hecha de vidrio o cristal. De modo que las imágenes detrás de ella se reflejen tal como lo harían en un vaso con la forma de nuestra imagen base. El truco esta en ajustar el threshold de la imagen que convertimos en "cristal". Se necesitan solamente 2 imágenes, el fondo y y el móvil con vinculación desde la biblioteca como "imagen1" e "imagen2".
Código Cristal
Da click sobre la imagen y mueve el mouse.
Coloca este código en el primer keyframe.
Código :
import flash.geom.*;
import flash.filters.*;
import flash.display.*;
img1 = BitmapData.loadBitmap("imagen1");
img2 = BitmapData.loadBitmap("imagen2");
createEmptyMovieClip("efecto",0);
sal = img2.clone();
efecto.attachBitmap(sal,0);
w = img1.width;
h = img1.height;
c=0x8080;
lim = img1.rectangle;
P0 = new Point();
Nm = new Matrix();
img1.threshold(img1,lim,P0,">",0xfae0e0,0,0xffffff);
BF = new BitmapData(w,h,false,c); xy = img1.clone();
xx = new BitmapData(w,h,true,c);yy = new BitmapData(w,h,true,c);
xy.colorTransform(lim,new ColorTransform(0,0,0,1,0,64,64,0));
xx.applyFilter(xy,lim,P0,new BevelFilter(4,45,0,0,0,1,4,4,1,4));
yy.applyFilter(xy,lim,P0,new BevelFilter(4,225,0,0,0,1,4,4,1,4));
BF.draw(xx);
BF.draw(yy,Nm,null,"add");
xx.dispose();
yy.dispose();
xy.dispose();
Mouse.hide();
dMap = new DisplacementMapFilter(BF,P0,2,2,-50,-50,"clamp");
CT = new ColorTransform(1,1,1,.4,0,0,0,0);
onMouseMove = function(){
Pt = new Point(_xmouse -w/2,_ymouse - h/2);
dMap.mapPoint = Pt;
Nm.tx = Pt.x;
Nm.ty = Pt.y;
sal.copyPixels(img2,img2.rectangle,P0);
sal.applyFilter(sal,img2.rectangle,P0,dMap);
sal.draw(img1,Nm,CT,"multiply");
}
onMouseMove();
img1.threshold(img1,lim,P0,">",0xfae0e0,0,0xffffff);
Si es un PNG con transparencia y preparado anteriormente no necesitará esta línea o se puede igualar a transparente. Si es otro tipo de imagen, habrá que tantear la mejor solución en el valor del threshold.
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

Por confusion el 02 de Febrero de 2007
Colocar u MC, gráfico o botón en el Escenario y darle nombre de instancia es "instanciar", no es "vincular para attach".
Si es eso, sigue estas instrucciones:
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.
Ahora debería de funcionar, tendrás que ajustar a tu gusto y necesidad los parámetros del ejemplo.
Por el 16 de Febrero de 2007
Por el 16 de Febrero de 2007
Tienes que considerar que la imagen a "cristalizar" es la imagen1 y el fondo la imagen2.
No solo hay que importarlas a la biblioteca, hay que vincularlas para actionscript como he indicado antes.
Y corregir el valor del threshold si fuera necesario como también indico anteriormente.
No funciona en Flash anterior al 8.
Por josluigtz el 18 de Febrero de 2007
import flash.geom.*;
import flash.filters.*;
import flash.display.*;
bueno no se si sean clases o que onda, por ejemplo no me salen los trucos del 360, ni del agua, no entendi bien como esta el asunto, bueno espero me puedan ayudar y si es posible me recomienden algunos tutos, o foros que pueda ver o seguir para entender mejor los AS que manejan gracias por su atencion.
joslui
Por sergio el 11 de Marzo de 2007
Por Glenda España el 28 de Abril de 2007
Por Marina el 27 de Noviembre de 2007
Soy novata en esto asi q todo lo q leo acame sirve un monton!!!!!
Otra vez gracias!!!
Por chuliano el 15 de Mayo de 2008
porque las clases
"import flash.geom.*;
import flash.filters.*;
import flash.display.*;"
no las acepta. desde ya gracias
Por karla el 04 de Septiembre de 2008
Por janodigital el 15 de Febrero de 2009
Por Misael el 09 de Abril de 2009
Google no muerde, busquen como vincular una imagen y ya, se acabaron los problemas.
chuliano-blog: Las clases de Flash no se pueden utilizar en Swish.
Por benitez el 10 de Junio de 2009
Por sofia el 02 de Marzo de 2010
Por JinGT el 07 de Diciembre de 2010
import flash.geom.*;
import flash.filters.*;
import flash.display.*;
import flash.events.MouseEvent;
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 img1:BitmapData = ImagenToBitmapData("imagen1");//CRISTAL
var img2:BitmapData = ImagenToBitmapData("imagen2");//FONDO
var efecto:MovieClip =new MovieClip ();
addChild(efecto);
var sal:BitmapData = img2.clone();
efecto.addChild(new Bitmap(sal));
var w:int = img1.width;
var h:int = img1.height;
c=0x8080;
var lim:Rectangle = img1.rect ;
var P0:Point = new Point();
var Nm:Matrix = new Matrix();
img1.threshold(img1,lim,P0,">",0xfae0e0,0,0xffffff);
trace("Llego0")
var BF:BitmapData = new BitmapData(w,h,false,c);
var xy:BitmapData = img1.clone();
var xx:BitmapData = new BitmapData(w,h,true,c);
var yy:BitmapData = new BitmapData(w,h,true,c);
xy.colorTransform(lim,new ColorTransform(0,0,0,1,0,64,64,0));
xx.applyFilter(xy,lim,P0,new BevelFilter(4,45,0,0,0,1,4,4,1,4));
yy.applyFilter(xy,lim,P0,new BevelFilter(4,225,0,0,0,1,4,4,1,4));
BF.draw(xx);
trace("Llego1")
BF.draw(yy,Nm,null,"add");
xx.dispose();
yy.dispose();
xy.dispose();
trace("Llego2")
//Mouse.hide();
var dMap:DisplacementMapFilter = new DisplacementMapFilter(BF,P0,2,2,-50,-50,"clamp");
trace("Llego3")
var CT:ColorTransform = new ColorTransform(1,1,1,.4,0,0,0,0);
trace("Llego4")
this.addEventListener(MouseEvent.MOUSE_MOVE,function()
{
var Pt:Point = new Point(mouseX -w/2,mouseY - h/2);
dMap.mapPoint = Pt;
Nm.tx = Pt.x;
Nm.ty = Pt.y;
sal.copyPixels(img2,img2.rect,P0);
sal.applyFilter(sal,img2.rect,P0,dMap);
sal.draw(img1,Nm,CT,"multiply");
});
Por ddh el 28 de Septiembre de 2011