begin process at 2012 05 26 06:33:17
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

ActionScripts

 > PARTICULE SYSTEM

PARTICULE SYSTEM


 Information sur la source

Note :
Aucune note
Catégorie :ActionScripts Classé sous :particule, frameevent, oop Niveau :Initié Date de création :10/09/2011 Vu / téléchargé :3 451 / 180

Auteur : yasdar

Ecrire un message privé
Site perso
Commentaire sur cette source (10)
Ajouter un commentaire et/ou une note

 Description

Cliquez pour voir la capture en taille normale
particule system sipmle qui emet des fleurs au passage de la souris
particule system sipmle qui emet des fleurs au passage de la souris

Source

  • //*********** 1er class************************
  • package {
  • import flash.display.Sprite;
  • import flash.events.Event;
  • public class Myparticule extends Sprite{
  • /*private var emitterX:Number= stage.stageWidth/2;
  • private var emitterY:Number= stage.stageHeight/2;*/
  • public function Myparticule(){
  • stage.addEventListener(Event.ENTER_FRAME,onloop,false,0,true);
  • }
  • public function onloop(e:Event):void{
  • var p:Particule = new Particule(mouseX,mouseY,Math.random()*11-6,Math.random()*-20,.6,Math.random()*0xFFFFFF);
  • addChild(p);
  • }
  • }
  • }
  • //********************************* 2ème class**********************
  • package{
  • import flash.display.*;
  • import flash.geom.ColorTransform;
  • import flash.events.Event;
  • public class Particule extends Sprite{
  • private var _xpos:Number;
  • private var _ypos:Number;
  • private var _xVel:Number;
  • private var _yVel:Number;
  • private var _grav:Number;
  • public function Particule(xp:Number,yp:Number,xVel:Number,yVel:Number,grav:Number,col:uint){
  • _xpos = xp;
  • _ypos = yp;
  • _xVel = xVel;
  • _yVel = yVel;
  • _grav = grav;
  • var mc:Sprite = new Pizza();
  • addChild(mc);
  • x=_xpos;
  • y=_ypos;
  • alpha=.8;
  • scaleX = scaleY = Math.random()*0.7+0.3;
  • var colorInfo:ColorTransform = mc.transform.colorTransform;
  • colorInfo.color = uint(col);
  • mc.transform.colorTransform = colorInfo;
  • addEventListener(Event.ENTER_FRAME, onRun,false,0,true);
  • }
  • public function onRun(e:Event):void{
  • _yVel+=_grav
  • _xpos+=_xVel;
  • _ypos+=_yVel;
  • x=_xpos;
  • y=_ypos;
  • if(_xpos<0 || _ypos<0 || _xpos>stage.stageWidth || _ypos>stage.stageHeight){
  • removeEventListener(Event.ENTER_FRAME, onRun);
  • parent.removeChild(this);
  • }
  • }
  • }
  • }
//*********** 1er class************************
package {
	import flash.display.Sprite;
	import flash.events.Event;

	public class Myparticule extends Sprite{
		/*private var emitterX:Number= stage.stageWidth/2;
		private var emitterY:Number= stage.stageHeight/2;*/
		
		public function Myparticule(){
			
			stage.addEventListener(Event.ENTER_FRAME,onloop,false,0,true);
		}
		public function onloop(e:Event):void{
			
			
			var p:Particule = new Particule(mouseX,mouseY,Math.random()*11-6,Math.random()*-20,.6,Math.random()*0xFFFFFF);
			addChild(p);
		}
	}
}
//********************************* 2ème class**********************

package{
	import flash.display.*;
	import flash.geom.ColorTransform;
	import flash.events.Event;

	public class Particule extends Sprite{
		
		private var _xpos:Number;
		private var _ypos:Number;
		private var _xVel:Number;
		private var _yVel:Number;
		private var _grav:Number;
		
		public function Particule(xp:Number,yp:Number,xVel:Number,yVel:Number,grav:Number,col:uint){
			_xpos = xp;
			_ypos = yp;
			_xVel = xVel;
			_yVel = yVel;
			_grav = grav;
			var mc:Sprite = new Pizza();
			addChild(mc);
			x=_xpos;
			y=_ypos;
			alpha=.8;
			scaleX = scaleY = Math.random()*0.7+0.3;
			var colorInfo:ColorTransform = mc.transform.colorTransform;
			colorInfo.color = uint(col);
			mc.transform.colorTransform = colorInfo;
			
			addEventListener(Event.ENTER_FRAME, onRun,false,0,true);
			
		}
		public function onRun(e:Event):void{
			_yVel+=_grav
			_xpos+=_xVel;
			_ypos+=_yVel;
			x=_xpos;
			y=_ypos;
			
			if(_xpos<0 || _ypos<0 || _xpos>stage.stageWidth || _ypos>stage.stageHeight){
				removeEventListener(Event.ENTER_FRAME, onRun);
				parent.removeChild(this);
			}
			
		}
	}
}

 Conclusion

c'est pas facile j'aimerais bien faire d'autres plus compliqués.

 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip


 Sources du même auteur

Source avec Zip LECTURE DE TEXTE "VOICE"
Source avec Zip ZOOM SUR UNE IMAGE
Source avec Zip Source avec une capture UN PEU DE MATH
Source avec Zip Source avec une capture GALLERIE PHOTO AVEC XML
Source avec Zip Source avec une capture MP3 LAYER NICE &SMALL

 Sources de la même categorie

Source avec Zip Source avec une capture OUVRIR UNE ANIMATION EXTERNE DANS UN CLIP VIDE. par KcHeY
Source avec Zip ZOOM SUR UNE IMAGE par yasdar
Source avec Zip Source avec une capture UN PEU DE MATH par yasdar
Source avec Zip Source avec une capture GALLERIE PHOTO AVEC XML par yasdar
Source avec Zip Source avec une capture MP3 LAYER NICE &SMALL par yasdar

 Sources en rapport avec celle ci

Source avec Zip Source avec une capture PARTICLE 1.0 par Ockam
Source avec Zip EMETTEUR DE PARTICULES AS3 par mousman

Commentaires et avis

Commentaire de pegase31 le 10/09/2011 22:38:17 administrateur CS

Bonsoir, ça sent la source convertie d'as2, ça ...

Alors juste pour info :
- Il est moins gourmand en cpu d'utiliser un seul et unique enterframe général au système de particule qui gère toutes particules dans une boucles que d'en placer un dans chacune des particules.
- La gestion de particules se ferait alors dans un tableau de type Vector.<Particule> afin d'y avoir un accès rapide et précis.

Tu verras une diminution notable de la charge CPU une fois ces changements faits.

Peg'

Commentaire de aerolyte le 10/09/2011 22:51:08

idem, et il me semble que onloop et onrun sont a mettre en private

cordialement

Commentaire de yasdar le 10/09/2011 22:58:17

AEROLYTE
pourquoi vous pensez que onloop et onrun sont a mettre en private ?

Commentaire de pegase31 le 11/09/2011 17:43:40 administrateur CS

Je suis d'accord avec Aerolyte : ces deux fonctions sont appelées uniquement ne interne de la classe, et n'ont donc pas à être "publiques".

Peg'

Commentaire de yasdar le 11/09/2011 20:41:52

Oui c'est vrai les deux fonctions doivent être private .
Peg
j'ai penser à réduire l'utilisation des ENTER_FRAMES mais je vois pas comment.
j'aimerais bien savoir comment faire :
"La gestion de particules se ferait alors dans un tableau de type Vector.<Particule> afin d'y avoir un accès rapide et précis."
cordialement.

Commentaire de pegase31 le 11/09/2011 20:55:27 administrateur CS

tu places chaque particule que tu crées dans un tableau à la base de ton objet et tu fais un "for" dans ton unique enterframe pour cycler sur chaque particule et y exécuter "onRun".

Peg'

Commentaire de aerolyte le 12/09/2011 01:01:19

Meme mieux utilise "foreach"

Commentaire de top30 le 12/09/2011 08:47:08

ParticuleGenerator(gravity)
La classe qui gère les particules (création, déplacement)

class ParticuleView(content,position,color);
La classe qui contient les données de chaque particule


Pour ce qui est du onRun...


PUBLIC function update(){
   // La function qui actualise l'état de la particule
}

PRIVATE function updateHandler( $e:Event):void{
   this.update();
}
Mais c'est vrai que c'est mieux 1 "enterFrame" qui exécute 200 fonctions que 200 "enterFrame" qui exécute 1 fonction...

Commentaire de billyben le 12/09/2011 10:22:40

Salut, juste un petit tricks qui améliore sensiblement les perf : Le Math.random() est assez gourmand (bon, là il n'y en a que 3/frame, donc ce n'est pas la mort non plus!), mais on peux "simuler" un random via un Vector.<Number> de longueur fixe (pour les perf) que l'on rempli à l'aide de random à l'instanciation de la classe, on gagne pas mal au final sur des gros volumes d'appel à cette fonction (particulièrement dans un système de particule). Le tout est d'avoir une taille suffisante pour avoir un effet vraiment aléatoire, par exemple

private var randomVec:Vector.<Number>;

public function constructeur():void{
   randomVec=new Vector.<Number>(1000, true);
   for (vari:int=0; i<1000; i++)randomVec[i]=Math.random();
}

puis pour l'interroger dans le script, il suffit d'avoir une variable à incrémenter :

private var randId:int=0;

private function maFn(args):void{
  var randNumber=randomVec[randId++%1000];
}


Sinon, pour l'enterFrame, perso je préfère utiliser un Timer, c'est plein de possibilités...

Commentaire de martineapprendlephp le 01/12/2011 15:03:15

Il n'y a que qui ait un problème avec la méthode non-définie "pizza"?

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

bouton avec particule [ par sireerik ] bonjour. je voudrais creer un bouton style papillon qui pert ou est suivi par des particule de lumiere, mais je ne sais pas comment fair. si quelqun a masques dynamiques sur particules as3 [ par totoindia ] salut à tous, je suis nouveau sous as3 (depuis avant hier soir ...) et j'ai un petit soucis avec mon projet flash: à partir de tutoriels et de ma volo


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 2,449 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales