09 de Septiembre de 2010

Notas Espacio Programación

galería de imágenesvideo
AUTOR: Andrés Fernández
FECHA: 7/6/2009
LECTURAS:1884
Buscar Notas
volver
Borrar pixeles con BitmapData

Goma de Borrar en Flash

Veremos cómo "eliminar" pixeles de una máscara usando la propiedad cacheAsBitmap y BitmapData
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,true0x00000000);
    
bmp.copyPixels(tmp,new Rectangle0055),new Point(this._xmouse,this._ymouse),null,true);
    
tmp.dispose();
}
Mouse.hide();
this.onMouseMove=function(){cursor_erase._x=_xmouse;cursor_erase._y=_ymouse;}


Home - Quiénes Somos - Portfolio - Espacio Diseño - Espacio Programación - Capacitación - Contacto - RSS - XHTML 1.0