Panel Pixelar (PixelPanel)
Hace mucho no escribo nada de nada, pero estuve con poco tiempo :S asi que pido perdón!
El otro día armando un banner me surgió la necesidad de crear esta pequeña clase. Lo que hace es a traves de algunos arrays de ceros y unos dibuja en una tabla elementos encendidos o apagados.
Para que se entienda mejor veamos un ejemplo:
La idea es simple, creamos una clase llamada PixelPanel, la cual recibe como parametros 4 cosas:
table: es un array multiple con 0 y 1. El cero indica q ese cuadrado no se vea, y el uno indica que si se vea.
link: es el nombre(linkeaje) del MovieClip que usaremos como "pixel".
separacion: es la distancia entre los MovieClip que usamos en pixeles.
duracion: el tiempo que tarda en generar la imagen en segundos.
Acá va la Clase entera, para que la vean, es muy simple:
Clase PixelPanel:
-
class PixelPanel extends MovieClip {
-
//
-
var duracion:Number;
-
var link:String;
-
var tabla:Array;
-
var separacion:Number;
-
var j:Number;
-
public function PixelPanel() {
-
this.j = 0;
-
}
-
private function depth():Number {
-
return j++;
-
}
-
//
-
public function init(_tabla:Array, _link:String, _separacion:Number, _duracion:Number):Void {
-
this.duracion = _duracion*1000;
-
this.link = _link;
-
this.tabla = _tabla;
-
this.separacion = _separacion;
-
//
-
for (var i:Number = 0; i<tabla.length; i++) {
-
for (var u:Number = 0; u<tabla[i].length; u++) {
-
var tmp:MovieClip = this.attachMovie(this.link, "item_"+i+"_"+u, depth());
-
tmp._x = (tmp._width+separacion)*u;
-
tmp._y = (tmp._height+separacion)*i;
-
tmp.gotoAndStop("off");
-
tmp.estado = this.tabla[i][u];
-
tmp.tiempo = getTimer();
-
tmp.duracion = random(this.duracion);
-
tmp.onEnterFrame = function() {
-
if (getTimer()-this.tiempo>=this.duracion) {
-
if (this.estado == 1) {
-
this.gotoAndStop("on");
-
}
-
this.onEnterFrame = null;
-
}
-
};
-
}
-
}
-
}
-
public function cambio(_tabla:Array):Void {
-
this.tabla = _tabla;
-
for (var i:Number = 0; i<tabla.length; i++) {
-
for (var u:Number = 0; u<tabla[i].length; u++) {
-
var tmp:MovieClip = this["item_"+i+"_"+u];
-
tmp.estado = this.tabla[i][u];
-
tmp.tiempo = getTimer();
-
tmp.duracion = random(this.duracion);
-
tmp.onEnterFrame = function() {
-
if (getTimer()-this.tiempo>=this.duracion) {
-
if (this.estado == 1) {
-
this.gotoAndStop("on");
-
} else {
-
this.gotoAndStop("off");
-
}
-
this.onEnterFrame = null;
-
}
-
};
-
}
-
}
-
}
-
public function off():Void {
-
for (var i:Number = 0; i<this.tabla.length; i++) {
-
for (var u:Number = 0; u<this.tabla[i].length; u++) {
-
var tmp:MovieClip = this["item_"+i+"_"+u];
-
tmp.gotoAndStop("off");
-
}
-
}
-
}
-
}
Expliquemos un poco la clase.
Tenemos tres metodos. El primero se llama init y lo que hace es crear la grilla o tabla duplicando los MovieClips y ubicando su linea de tiempo (la del MC) en la etiqueta "off", por lo que no se vera nada.
Dentro del tiempo que le pasamos como parametro de duración empezarán a aprecer los movie ubicando la linea de tiempo de los mismos en la etiqueta "on", donde puede haber una animación como es el caso de ejemplo donde hay una pequeña animación del cuadradito.
Otro de los metodo se llama cambio y se le pasa un único parametro, que es un array con la nueva imagen que queremos generar.
Con este metodo podemos llamarlo varias veces con un setInterval para que cada x tiempo cambie de imagen (como en el ejemplo).
Acá les dejo las lineas de cogido y los array que use para este ejemplo, así se termina de entender como funsiona la clase.
-
array1 = [ [1,1,1,0,1,1,1,0,1,1,1,0,1,1,1,0,0,1,1,1,0,1,1,1,0],
-
[1,0,0,0,1,0,0,0,0,1,0,0,1,0,1,0,0,1,0,0,0,1,0,0,0],
-
[1,1,0,0,1,1,1,0,0,1,0,0,1,0,1,0,0,1,1,0,0,1,1,1,0],
-
[1,0,0,0,0,0,1,0,0,1,0,0,1,0,1,0,0,1,0,0,0,0,0,1,0],
-
[1,1,1,0,1,1,1,0,0,1,0,0,1,1,1,0,0,1,1,1,0,1,1,1,0] ];
-
-
array2 = [ [1,0,1,0,1,0,0,1,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0],
-
[1,0,1,0,1,1,0,1,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0],
-
[1,0,1,0,1,0,1,1,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0],
-
[1,0,1,0,1,0,0,1,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0],
-
[1,1,1,0,1,0,0,1,0,1,0,1,0,1,0,1,0,1,0,0,0,0,0,0,0] ];
-
-
array3 = [ [1,1,1,0,1,1,1,0,1,0,1,0,1,1,1,0,1,1,1,0,1,1,1,0,1],
-
[1,0,1,0,1,0,1,0,1,0,1,0,1,0,0,0,1,0,1,0,1,0,1,0,1],
-
[1,1,1,0,1,1,1,0,1,0,1,0,1,1,0,0,1,1,1,0,1,1,1,0,1],
-
[1,0,0,0,1,1,0,0,1,0,1,0,1,0,0,0,1,0,1,0,1,0,1,0,0],
-
[1,0,0,0,1,0,1,0,1,1,1,0,1,1,1,0,1,1,1,0,1,0,1,0,1] ];
-
-
array4 = [ [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
-
[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
-
[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
-
[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
-
[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] ];
-
/**/
-
-
animacion_mc.init(array1, "item_mc", 2, 1);
-
-
setInterval(proxima, 3000);
-
-
i = 1;
-
function proxima(){
-
if(i == 4){
-
i = 1;
-
}else{
-
i++;
-
}
-
animacion_mc.cambio(eval("array"+i))
-
}
Espero se entienda y les haya gustado el efecto. A continuación la descarga del ejemplo.


Escrito por: WeeDo en 




nico dijo:
saludos
WeeDo dijo:
Yo también estudié en Da Vinci y dí clases una vez recibido
nico dijo:
saludos
ramon dijo:
me podrias recomendar literatura impresa en español o cosas por ahi en la web, que expliquen con palitos y bolitas el actionscript?
primero desde no cero, desde -5
gracias, ya con tus tutoriales.
WeeDo dijo:
Tambien podes visitar www.actionscript.es que es un rejunte de los mejores sites sobre AS y Flash.
De libros para empezar hay un libro q me sirvio mucho q se llama “ActionScript 2.0 para Flash MX” de la editorial Anaya Multimedia… es medio viejo, pero siemrpe salen libros parecidos con versiones nuevas de Flash.
Saludos!
poto_yeah dijo: