PARTICULE SYSTEM

pegase31 Messages postés 6138 Date d'inscription dimanche 21 décembre 2003 Statut Modérateur Dernière intervention 4 septembre 2013 - 10 sept. 2011 à 22:38
martineapprendlephp Messages postés 1 Date d'inscription jeudi 1 décembre 2011 Statut Membre Dernière intervention 1 décembre 2011 - 1 déc. 2011 à 15:03
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/53570-particule-system

martineapprendlephp Messages postés 1 Date d'inscription jeudi 1 décembre 2011 Statut Membre Dernière intervention 1 décembre 2011
1 déc. 2011 à 15:03
Il n'y a que qui ait un problème avec la méthode non-définie "pizza"?
cs_billyben Messages postés 1 Date d'inscription jeudi 8 décembre 2005 Statut Membre Dernière intervention 12 septembre 2011
12 sept. 2011 à 10:22
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...
top30 Messages postés 1158 Date d'inscription vendredi 21 février 2003 Statut Membre Dernière intervention 6 août 2010
12 sept. 2011 à 08:47
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...
aerolyte Messages postés 465 Date d'inscription mardi 17 avril 2007 Statut Membre Dernière intervention 4 mai 2013 1
12 sept. 2011 à 01:01
Meme mieux utilise "foreach"
pegase31 Messages postés 6138 Date d'inscription dimanche 21 décembre 2003 Statut Modérateur Dernière intervention 4 septembre 2013 12
11 sept. 2011 à 20:55
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'
yasdar Messages postés 121 Date d'inscription mercredi 12 janvier 2011 Statut Membre Dernière intervention 19 mai 2012
11 sept. 2011 à 20:41
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. afin d'y avoir un accès rapide et précis."
cordialement.
pegase31 Messages postés 6138 Date d'inscription dimanche 21 décembre 2003 Statut Modérateur Dernière intervention 4 septembre 2013 12
11 sept. 2011 à 17:43
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'
yasdar Messages postés 121 Date d'inscription mercredi 12 janvier 2011 Statut Membre Dernière intervention 19 mai 2012
10 sept. 2011 à 22:58
AEROLYTE
pourquoi vous pensez que onloop et onrun sont a mettre en private ?
aerolyte Messages postés 465 Date d'inscription mardi 17 avril 2007 Statut Membre Dernière intervention 4 mai 2013 1
10 sept. 2011 à 22:51
idem, et il me semble que onloop et onrun sont a mettre en private

cordialement
pegase31 Messages postés 6138 Date d'inscription dimanche 21 décembre 2003 Statut Modérateur Dernière intervention 4 septembre 2013 12
10 sept. 2011 à 22:38
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. 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'
Rejoignez-nous