0 3 mins 2 semanas

En este número se continúa abordando la generación de partículas, siguiendo el modelo de programación orientada a objetos en Flash. Se supone que ya tengamos una nube copiosa derramando agua sobre el terreno. Habíamos declarado ya, en la clase Drop, un comportamiento asociado a tres elementos que no se implementaron en el código anterior: las instancias del horizonte skyline, de la

casa house y de la chimenea chimney. Se trataba de activar mediante play() la reproducción de las gotas que colisionaran con dichas instancias. Para ello habría que crear dos fotogramas adicionales en drop_symbol, que representaran a la gota salpicando. Por supuesto, deteniendo el fotograma inicial para impedir la reproducción automática de este efecto gráfico. Se recomendó, finalmente, crear el humo generado por la chimenea ubicada encima de la casa; aunque esperamos que se hayan ocupado de convertir en un símbolo la línea y el relleno del horizonte.

Rayo de sol

Pues bien, luego de puntualizar estos detalles, pasaremos de la generación lineal a una un poco más compleja. Hasta el momento hemos tratado con objetos puntuales que siguen una trayectoria unidimensional hasta desvanecerse. Si generamos objetos que necesitan rotar en su instante inicial t=0 y/o durante su tiempo de vida, debemos recurrir a los conceptos básicos del cálculo trigonométrico. Comencemos a comprender esto dibujando un relleno sin bordes con forma de triángulo isósceles acostado horizontalmente, donde sus lados tengan 6 veces mayor longitud que la base. Luego convirtámolos en un MovieClip, donde el registro esté ubicando en el punto medio de la base, quedando similar a la figura de la derecha. Quitaremos la instancia de este símbolo del escenario y, en la biblioteca, le asignaremos el identificador sunbeam_symbol vinculado a la clase Sunbeam. Luego creamos otro MovieClip, redondo y amarillo, a cuya instancia la nombraremos sun. Con todo listo, pasaremos a la edición de un nuevo documento de ActionScript, que albergará las propiedades y métodos de la clase Sunbeam:

class Sunbeam extends MovieClip{
  // parámetros
  var size:Number;
  var rotation:Number;
  var sun_object:MovieClip // Se refiere al Sol


  // función que retorna un número aleatorio entre dos valores extremos
  function randomize(min_value, max_value) {
    return (Math.floor(Math.random() * (max_value - min_value + 1)) + min_value);
  }


  // Constructor
  public function Sunbeam() {
    rotation = randomize(1,360);
    this._x = sun_object._x + (Math.cos((rotation * Math.PI) / 180) * (sun_object._width / 2));
    this._y = sun_object._y + (Math.sin((rotation * Math.PI) / 180) * (sun_object._width / 2));
    this._xscale = randomize(50,150);
    this._rotation = rotation;
  }


  // polimorfismo
  public function onEnterFrame() {
    this._xscale -= randomize(1,6);
    if(this._xscale <= 0){
      removeMovieClip(this);
    }
  }
}

Es necesario enfatizar que las clases deben ser guardadas por separadas en archivos de extensión as, con el mismo nombre de la clase que albergan y dentro de la misma carpeta del proyecto para que se acceda a ella automáticamente sin tener que acudir a la directiva #include.

Cuando tengamos lista la clase, debemos escribir en el _root el siguiente código para que al reproducir la película Flash, aparezca un resultado similar al mostrado:

var _counter:Number = 0;
var _factor:Number = 3; //factor de incremento del total de gotas


onEnterFrame = function() {
  for(var i:Number = 0; i < _factor; i++){
    attachMovie("sunbeam_symbol", "sunbeam" + _counter, getNextHighestDepth(),{sun_object:sun});
  }
  _counter += _factor;
}

En el siguiente número de la revista analizaremos paso a paso cómo generar una partícula que siga un movimiento oscilatorio sinusoidal, para aquellos que necesiten comenzar desde cero. Mientras tanto, es recomendable visitar los vínculos propuestos a continuación para familiarizarse con los fundamentos de la trigonometría y el lenguaje Action Script 2.0.

Escrito por ZorphDark

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *