© Stelios Kourakis 2005

< indice de programación

Fuegos Artificiales

Seguimos la experimentación con los clips dinamicos en un pequeno ejercicio: vamos a crear fuegos artificiales cuando el usuario clica en cualquier sitio de nuestra escena.

Bajar archivo de inicio

 

Bajar archivo final

 

Pensamiento

En realidad, un fuego artificial no es mas que una serie de particulas, cada cual huye del punto de la "explosión" hacía una dirección determinada. Lo que tenemos que hacer para generar una explosión es crear una gran cantidad de clips en la posición central, y luego asignar a cada uno de estos clips una dirección y una velocidad aleatoria.

Cada particula, una vez creada, tiene que moverse hacia su dirección en cada fotograma, disminuyendo a la vez su opacidad. Cuado llega a ser invisible, se borra.

Pero, supongamos que quiero mover mi particula unos 20 píxeles hacia una dirección de 35 grados - ¿cómo se hace? La única manera que tenemos para mover clips es alterando sus coordenadas _x y _y. Para mover una determinada distancia hacia un angulo concreto, tenemos que convertir a valores de movimiento en cada uno de los ejes x y y.

El ejemplo al lado muestra como se puede decomponer un ángulo a movimientos en los ejes x y y. Para decomponer un ángulo a desplazamientos en los dos ejes, uso esta fórmula:

Dado un ángulo a en radianes y una velocidad en píxeles por fotograma,

dx = Math.cos(angulo) * velocidad
dy = Math.sin(angulo) * velocidad

 

A Programar!

Vamos a crear nuestros fuegos artificiales en cada mouseDown en la pelicula principal. En cada clic, creamos unas cuantas particulas (150 en este ejemplo), las cuales se posicionan todas en la posición del cursor. A cada particula se le asigna una velocidad y un ángulo aleatorio (entre 0 y 2*Math.PI, un círculo completo). El ángulo se descompone a las variables movX y movY, las cuales determinarán el movimiento de cada particula.

contador = 0;

onMouseDown = function(){
	for (i=0; i<150;i++){
		nuevoClip = attachMovie("particula", "particula"+contador, contador++)
		nuevoClip._x = _xmouse
		nuevoClip._y = _ymouse
		angulo = Math.random()*2*Math.PI
		velocidad = Math.random()*6+3
		nuevoClip.movX = Math.cos(angulo)*velocidad
		nuevoClip.movY = Math.sin(angulo)*velocidad
		nuevoClip.onEnterFrame = moverParticula
	}	
}

Cada particula tiene la responsabilidad de desplazarse hacía la dirección indicada en cada fotograma, y a la vez a disminuir su _alpha. Si este llega a 0, el clip de la particula se elimina.

function moverParticula(){
	this._x += this.movX
	this._y += this.movY
	this.movY +=.3
	this._alpha -=5
	if (this._alpha <=0){
		this.removeMovieClip()
	}
}

 

< indice de programación