Un efecto popular y vistoso es el de una televisión sin recepción o señal, el cual es muy fácil de crear empleando sólo código.
En este tip crearemos una clase en ActionScript 3 que nos generará este efecto.
Esta es la clase, explicada con comentarios dentro del código:
Código :
package Classes
{
//Importamos los paquetes que necesitaremos
import flash.display.*;
import flash.utils.Timer;
import flash.events.TimerEvent;
//Nombramos la clase que será heredada de la Clase Sprite para poder utilizar el método addChild
public class TvEffect extends Sprite
{
//Creamos las variables
private var X:Number; //Almacenará la posición x de el efecto
private var Y:Number; //Almacenará la posición y de el efecto
private var bmd:BitmapData; //Contendrá los datos para crear el Bitmap, en este caso sus medidas
private var seed:int; //Guardará el RandomSeed utilizado para el método Noise, que es el que utilizaremos para crear nuestro efecto tv
private var bmp:Bitmap; //Nuestra instancia de Bitmap
private var timer:Timer = new Timer(1); //Objeto Timer que hará cambiar el Noise para producir el efecto tv
//Creamos la función que nos pedirá los datos de nuestro efecto, estos son: ancho, alto, posición x y posición y
public function setEffect(w:Number, h:Number, xPos:Number, yPos:Number):void
{
X = xPos;
Y = yPos;
bmd = new BitmapData(w, h); //Con los datos obtenidos creamos nuestro BitmapData
}
/*Esta función se encarga del efecto, lo que hace es aplicar el método Noise a el objeto BitmapData para generar pixeles aleatorios
y guardarlos en la instancia de nuestro Bitmap, posicionarla y añadirla al escenario*/
private function main(event:TimerEvent):void
{
seed = int(Math.random() * int.MAX_VALUE);
bmd.noise(seed, 0, 0xFF, BitmapDataChannel.RED, true); //Es importante dejar este último valor en \"true\" para que los pixeles sean en escala de grises
bmp = new Bitmap(bmd);
bmp.x = X;
bmp.y = Y;
addChild(bmp);
}
//Esta funcion inicia el efecto
public function init():void
{
timer.addEventListener(TimerEvent.TIMER, main);
timer.start();
}
}
}
Para llamarla lo hacemos así:
Código :
import Classes.TvEffect; var tve:TvEffect = new TvEffect(); tve.setEffect(ancho, alto, x, y); tve.init(); addChild(tve);
Aqui está un ejemplo:

Por zequi el 29 de Abril de 2008
al pasp de los segundos tilda el browser.
compruebenlo ustedes mismos.
Pero no es nada práctico, además hace que el navegador se ponga lento
Por raxiro el 29 de Abril de 2008
Carlos sinceramente es verdad que vuelve lokito al browser, es mas me esta costando escribir =P
Soy de los que les gusta mucho hacer cosas solo en AS pero a veces (sean ejemplos complejos o muy simples) es mucho mas conveniente mezclar AS con la libreria o la linea de tiempo =)
De todas maneras el ejemplo vale para demostrar que AS RULEZ =D
Hagan esto con JavaScript a ver si no se vuelven locos antes!!!
Hay que investigar a ver si hay otra manera de hacerlo sin que el browser se aloque.
Pero es buen tip, sin duda a alguien le servira... Lastima que come procesador...
Freddie :
Precisamente fué lo que modifiqué ayer, también se puede realizar el efecto con un for y el método setPixel, pero me parece que se ve mucho mejor de esta manera.
Aquí está el SWF con el timer ajustado a 100 milisegundos (espero que un BOFH me haga favor de actualizar el tip).
Disculpen el ejemplo, lo tuve que probar en un otros ordenadores porque en el mío no se traba.
Por [s_s]&[sos] el 29 de Abril de 2008
Por quien yo? el 29 de Abril de 2008
Por [s_s]&[sos] el 29 de Abril de 2008
Grax Carlos, pensé que AS3 no se colgaba
Carlos, intenta ponerle:
Código :
Lo vi en mi CoreDuo con la ventana maximinizada y se fue al 100%
Por Carloz el 29 de Abril de 2008
Lo puse para ser descargado y que el tip fuese actualizado, de otra forma lo hubiese llamado con BBCode.
Por EzeQL el 30 de Abril de 2008
Código :
private function main(event:TimerEvent):void { seed = int(Math.random() * int.MAX_VALUE); bmd.noise(seed, 0, 0xFF, BitmapDataChannel.RED, true); }y..
Código :
public function init():void { bmp = new Bitmap(bmd); bmp.x = X; bmp.y = Y; trace(bmp) addChild(bmp); timer.addEventListener(TimerEvent.TIMER, main); timer.start(); }por otro lado, usa el timer en 50 donde a mi parecer logras el efecto
Código :
Ahora, de usarlo como lo tienes, estás llenando el DisplayObjectContainer con más y más Bitmap, sólo basta con poner en tu main
Código :
para q veas como vas agregando child mandando el procesador a mil
Buen aporte EzeQL
PD1: ¿No seria mejor un gif?
PD2: Mi procesador... ha muerto...
[s_s]&[sos]-blog :
/em muere por aprender AS 3.0 bien T_T
Por XxX el 22 de Junio de 2008
Por rensho el 01 de Julio de 2008
Por mariana el 28 de Septiembre de 2008
Por Leo el 25 de Noviembre de 2008
Por bandido666 el 10 de Enero de 2009
Así solo las 10 primeras veces seria un proceso lento, y después seria normal.
Por josue el 13 de Marzo de 2011
Por brayan jaimes el 05 de Abril de 2011