Clase de ActionScript 3 para añadir sombras a MovieClips

Posted by admin | AS3, Class, POO | Tuesday 14 August 2007 4:08 pm

Esta es una sencilla clase de ActionScript 3 que he escrito para añadir y modificar fácilmente sombras a MovieClips.

Lo que hago simplemente es implementar la clase DropShadowFilter para añadirle un filtro de sombra al clip.

La clase se compone básicamente de dos funciones iniSombra() y update(). En la primera añado los valores por defecto que tendrá el filtro de sombra y en la segunda es la funciónque añadirá el filtro al MovieClip con dichos parámetros. Estas dos funciones son llamadas desde el constructor de la clase.

private function iniSombra():void
{
   _color = 0x000000;
   _angulo = 45;
   _alfa = 0.7;
   _blurX = 5;
   _blurY = 5;
   _distancia = 5;
   _strength = 0.65;
   _inner = false;
   _knockout = false;
   _calidad = BitmapFilterQuality.HIGH;
}
private function update():void
{
   _filtros = new Array();
   _sombra = new DropShadowFilter(_distancia,_angulo,_color,_alfa,_blurX,_blurY,_strength,_calidad,_inner,_knockout);
   _filtros.push(_sombra);
   _clip.filters = _filtros;
}

Además la clase incorpora una serie de setters para modificar los parámetros del filtro. Estos setters realizan una llamada a la función update() para actualizar la sombra al cambiar cualquier parámetro.

public function set color(color:Number):void
{
   _color = color;
   update();
}

Esta sería la clase completa:

package
{
   import flash.display.Sprite;
   import flash.filters.BitmapFilter;
   import flash.filters.BitmapFilterQuality;
   import flash.filters.DropShadowFilter;
   //------------------------------------------
   public class Sombra extends Sprite
   {
      private var _ruta:Sprite;
      private var _clip:Object;
      private var _filtros:Array;
      private var _sombra:BitmapFilter;
      private var _color:Number;
      private var _angulo:Number;
      private var _alfa:Number;
      private var _blurX:Number;
      private var _blurY:Number;
      private var _distancia:Number;
      private var _strength:Number;
      private var _inner:Boolean;
      private var _knockout:Boolean;
      private var _calidad:Number;
      //------------------------------------------
      public function Sombra(clip:Object)
      {
         _ruta = clip.parent;
         _clip = clip;
         iniSombra();
         update();
      }
      //------------------------------------------
      private function iniSombra():void
      {
         _color = 0x000000;
         _angulo = 45;
         _alfa = 0.7;
         _blurX = 5;
         _blurY = 5;
         _distancia = 5;
         _strength = 0.65;
         _inner = false;
         _knockout = false;
         _calidad = BitmapFilterQuality.HIGH;
      }
      //------------------------------------------
      private function update():void
      {
         _filtros = new Array();
         _sombra = new DropShadowFilter(_distancia,_angulo,_color,_alfa,_blurX,_blurY,_strength,_calidad,_inner,_knockout);
         _filtros.push(_sombra);
         _clip.filters = _filtros;
      }
      //------------------------------------------
      public function set color(color:Number):void
      {
         _color = color;
         update();
      }
      //------------------------------------------
      public function set angulo(angulo:Number):void
      {
         _angulo = angulo;
         update();
      }
      //------------------------------------------
      public function set alfa(alfa:Number):void
      {
         _alfa = alfa;
         update();
      }
      //------------------------------------------
      public function set blurX(blurX:Number):void
      {
         _blurX = blurX;
         update();
      }
      //------------------------------------------
      public function set blurY(blurY:Number):void
      {
         _blurY = blurY;
         update();
      }
      //------------------------------------------
      public function set distancia(distancia:Number):void
      {
         _distancia = distancia;
         update();
      }
      //------------------------------------------
      public function set strength(strength:Number):void
      {
         _strength = strength;
         update();
      }
      //------------------------------------------
      public function set inner(inner:Boolean):void
      {
         _inner = inner;
         update();
      }
      //------------------------------------------
      public function set knockout(knockout:Boolean):void
      {
         _knockout = knockout;
         update();
      }
      //------------------------------------------
      public function set calidad(calidad:Number):void
      {
         _calidad = calidad;
         update();
      }
      //------------------------------------------
   }
}

Un ejemplo de uso podría ser este (en nuestro .fla):

import Sombra;
var sombra1:Sombra = new Sombra(logo1);
var sombra2:Sombra = new Sombra(logo2);
var sombra3:Sombra = new Sombra(logo3);
sombra2.blurX = 15;
sombra2.blurY = 15;
sombra2.angulo = 90
sombra2.distancia = 20;
sombra3.alfa = 1
sombra3.color = 0x0066CC
sombra3.blurX = 15;
sombra3.blurY = 15;
sombra3.distancia = 0;

Comparte:
  • Meneame
  • Twitter
  • Facebook
  • Google Bookmarks
  • del.icio.us
  • Technorati
  • email
  • Print

Post relacinonados:

  1. Clase para cargar contenido externo en Actionscript 3
  2. Clase de Actionscript 3 para arrays multidimensionales
  3. Clase para dibujar líneas de puntos en ActionScript 3
  4. Clase de ActionScript 3 para retardar la ejecución de funciones
  5. Asignar una clase ActionScript 3 a un itemRenderer en Flex

2 Comments »

  1. Comment by sslag — 15 December, 2009 @ 3:36 pm

    Muy bueno y útil.
    un simple
    new Sombra(miobjetovisible)

    y listo.
    Gracias

  2. Comment by Miguel Felix — 6 April, 2010 @ 11:18 am

    muy bueno, gracias por compartar tus conocimientos...

RSS feed for comments on this post. TrackBack URI

Leave a comment

Get Adobe Flash playerPlugin by wpburn.com wordpress themes