Comunidad de diseño web y desarrollo en internet online

Efecto de estática en televisión con ActionScript 3

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:

¿Sabes SQL? ¿No-SQL? Aprende MySQL, PostgreSQL, MongoDB, Redis y más con el Curso Profesional de Bases de Datos que empieza el martes, en vivo.

Publica tu comentario

o puedes...

¿Estás registrado en Cristalab y quieres
publicar tu URL y avatar?

¿No estás registrado aún pero quieres hacerlo antes de publicar tu comentario?

Registrate