En el pasado, si necesitábamos simular una goma de borrar en Flash, teníamos que crear una máscara conformada por una grilla de movieClips y aplicar dicha máscara al objeto cuyo borrado queríamos simular. Esto se debía a que, para emular el efecto de la goma, debíamos eliminar algunos de esos movieClips que integraban la máscara, de manera que se hiciera invisible la porción del objeto enmascarado correspondiente al espacio que ocupaban dichos movleClips. Esto traía algunos problemas, ya que, para que la goma fuera más o menos sensible había que crear muchos clips de dimensiones pequeñas. Y, como ya sabemos, cuantos más clips tuviésemos que crear, cada uno con su línea de tiempo, mayor era el tiempo de proceso y mayor era el consumo de memoria.
Afortunadamente, 2 cosas nos pueden ayudar para realizar esta tarea con un consumo mínimo de recursos. Una, la propiedad cacheAsBitmap del objeto MovieClip, que sirve para que Flash Player lo represente como mapa de bits. La otra es la posibilidad de "eliminar" pixeles de un objeto BitmapData anulando sus valores rgba. De esa manera, si creamos una máscara que contenga un objeto BitmapData, podremos "eliminar" porciones de la misma anulando los valores rgba de sus pixeles. Es decir, podemos obtener el mismo resultado que obteníamos en el pasado, cuando eliminábamos los clips que conformaban una máscara, pero sin la necesidad de crear múltiples MovieClips.
Veamos un ejemplo:
Y el código utilizado:
import flash.geom.*;
import flash.display.* ;
var pp=createEmptyMovieClip('pp',getNextHighestDepth());
pp._x=foto._x
pp._y=foto._y
var bmp=new BitmapData(foto._width,foto._height,true,0xFFFFFFFF);
pp.attachBitmap(bmp,1);
pp.cacheAsBitmap=foto.cacheAsBitmap=true;
foto.setMask(pp)
foto.onPress=function(){
this.onEnterFrame = borrar;
}
foto.onRelease = function() {
delete this.onEnterFrame;
}
function borrar() {
var tmp=new BitmapData(5,5,true, 0x00000000);
bmp.copyPixels(tmp,new Rectangle( 0, 0, 5, 5),new Point(this._xmouse,this._ymouse),null,true);
tmp.dispose();
}
Mouse.hide();
this.onMouseMove=function(){cursor_erase._x=_xmouse;cursor_erase._y=_ymouse;}