Particules Test PePea
--- Le Main
♥0 |
Line 121 |
Modified 2009-10-26 20:02:50 |
MIT License
archived:2017-03-20 10:41:14
ActionScript3 source code
/**
* Copyright pepea28 ( http://wonderfl.net/user/pepea28 )
* MIT License ( http://www.opensource.org/licenses/mit-license.php )
* Downloaded from: http://wonderfl.net/c/m5f3
*/
package {
import flash.display.Sprite;
import flash.display.Shape;
import flash.events.Event;
import flash.utils.Timer;
import flash.filters.BlurFilter;
import flash.events.TimerEvent;
/* --- Le Main */
public class Main extends Sprite
{
public function Main():void
{
}
}
}
import flash.display.Sprite;
import flash.display.Shape;
import flash.events.Event;
import flash.utils.Timer;
import flash.filters.BlurFilter;
import flash.events.TimerEvent;
/**
* Classe représentant un émetteur de particules
*/
class Emetteur extends Sprite
{
public const PI:Number = 3.14;
private var particules:Array; // ensemble de particules que gère à un temps donné l'émetteur courant
private var directionParticules:Array; // ensemble des directions pour chaque particule du tableau précédent
private var intervalleTemps:Number = 50; // intervalle de temps entre deux émissions (en millisecondes)
private var direction:Number = (-3*PI)/4; // indique l'angle principal d'émission de particules
private var intervalleAngle:Number = 0.05; // indique l'angle de précision de l'émission de particules
private var nombreParticules:Number; // nombre de particules émis à chaque émission (chaque intervalle de temps)
private var forceEmetteur:Number = 2.5; // force de l'émetteur
private var gravite:Number; // gravité appliqué aux particules émises par l'émetteur
private var timer:Timer; // timer pour calculer l'intervalle entre deux émissions
private var XInfLimite:Number = -250;
private var XSupLimite:Number = 250;
private var YInfLimite:Number = -250;
private var YSupLimite:Number = 250;
/* Constructeur de la classe Emetteur */
public function Emetteur():void
{
/*/
var rectangle:Shape = new Shape();
rectangle.graphics.beginFill(0x0000FF);
rectangle.graphics.drawRect(5, 5, 100, 30);
this.addChild(rectangle);
//*/
particules = new Array();
directionParticules = new Array();
// on ajoute le listener sur le Enter Frame pour pouvoir gérer l'animation
//this.addEventListener(Event.ENTER_FRAME, emittingHandler);
timer = new Timer(intervalleTemps,0);
timer.addEventListener(TimerEvent.TIMER, timerHandler);
}
/**
* Débute l'émission
*/
public function startEmit():void
{
timer.start(); // on démarre le timer
}
/**
* Stoppe l'émission de particules
*/
public function stopEmit():void
{
timer.stop();
timer.reset();
}
/**
* Stoppe l'émission de particules et efface toutes les particules qui étaient présentes
*/
public function clearEmetteur():void
{
}
public function isEmitting():Boolean
{
return timer.running;
}
public function getDirection():Number
{
return direction;
}
public function setDirection(dir:Number):void
{
direction = dir;
}
/**
* Gère l'émission et l'animation des particules
*/
public function emittingHandler(e:Event):void
{
// on parcourt toutes les particules et on calcule leur position
// avant de les afficher
var i:uint = 0;
while (i < particules.length)
{
particules[i].x += Math.cos(directionParticules[i])*forceEmetteur;
particules[i].y += Math.sin(directionParticules[i])*forceEmetteur;
// on regarde si la particule ne sort pas de l'écran
// si tel est le cas : on la dégage !
if (particules[i].x > XSupLimite || particules[i].y > YSupLimite
|| particules[i].x < XInfLimite || particules[i].y < YInfLimite)
{
this.removeChild(particules[i]);
particules.splice(i,1); // on DELETE : -> on recrée forcément une particule
directionParticules.splice(i,1); // on supprime également dans le tableau de directions pour pas perturber l'ordre
}
i++;
}
}
/**
* Gère la création des particules toutes les intervalleTemps millisecondes
*/
private function timerHandler(e:TimerEvent):void
{
// on va créer un particule
var p:Particule = new Particule();
p.x = 0;
p.y = 0;
p.rotation = toDeg(direction);
particules.push(p);
directionParticules.push(direction+Math.random()*intervalleAngle*2);
addChild(p);
}
private function toRad(deg:Number):Number
{
return PI*(deg)/180;
}
private function toDeg(rad:Number):Number
{
return 180*(rad) /PI;
}
}
import flash.display.Sprite;
import flash.display.Shape;
import flash.events.Event;
import flash.utils.Timer;
import flash.filters.BlurFilter;
import flash.events.TimerEvent;
/* ------- CLASSE PARTICULE ------ */
class Particule extends Sprite
{
public function Particule():void
{
var rectangle:Shape = new Shape();
rectangle.graphics.beginFill(0x0000FF);
rectangle.graphics.drawRect(5, 5, 10, 3);
var blur:BlurFilter = new BlurFilter(2, 2, 5);
rectangle.filters = [blur];
this.addChild(rectangle);
}
}