Crystal Particle System (CPS)

Sujets variés concernant le développement en PureBasic
Avatar de l’utilisateur
Crystal Noir
Messages : 892
Inscription : mar. 27/janv./2004 10:07

Crystal Particle System (CPS)

Message par Crystal Noir »

Salut tout le monde :)

Hier j'ai présenté un peu mon projet de faire un moteur de particule utilisable et paramétrable directement dans purebasic et sans utilisé de 3D, pour éviter de tout coder, ca serait long, car si on a des instructions particules 3D on en a pas pour la 2D.

Mon projet avance et je voulais vous expliquer un peu comment cela va marcher. Je suis en train de coder des fonctions pour permettre de gérer tout ca.

En fait cela va marcher différemment de ce qu'on connait déjà un peu. Normalement sur un moteur de particule tel qu'il est intégré à pure en 3D par exemple, on crée un emetteur avec le paramétrage des particules, on le met en route en lui disant d'emettre tous les tant et roulez jeunesse.

J'ai voulu étoffer un peu plus le principe. Ici vous ne contrôlez pas un emetteur de particules, mais les particules elles même. Vous pouvez avec quelques lignes à tout moment agir une UNE des particules en particulier.

Lorsqu'on ajoute des particules, c'est peu comme un emetteur sauf que nos particules sont identifiées ce qui nous permet de jouer sur chacune d'entre elles. Evidemment c pas fini mais je vais vous montrer à quoi ressemble le code.

Ainsi vous créez des particules avec un identifiant (comme si ct un identifiant d'emetteur), toutes les particules avec le même identifiant peuvent être affectées par une commande en une ligne de code, vous pouvez même en choisir que quelques une grâce au compteur d'élements.

Ainsi il est possible de créer plusieurs effets de particules en même temps tout en les gérant indépendamment.

Voici un exemple pour que vous voyez comment se présente le code (évidemment si vous le copiez coller ca marchera pas lol faut le fichier de procedure) :

Code : Tout sélectionner

Repeat
  For i = 1 To 5
    AjoutParticules(#Particule1,360,240,0.5,Random(100),0.65,2,RGB(255,255,255),Random(100),Random(100),100)
  Next
  ClearScreen(0,0,0)
  
Compter = ListParticules(#Particule1)
  For pouet = 0 To Compter
    If PositionX(#Particule1,pouet) < 0 Or PositionX(#Particule1,pouet) > 640 Or PositionY(#Particule1,pouet) < 0 Or PositionY(#Particule1,pouet) > 480 Or Vie(#Particule1,pouet) = 0
      EffaceElement(#Particule1,pouet)
    Else
      UpdateParticules(#Particule1,pouet)
    EndIf
  Next
  
AfficheParticules(#Particule1)
  FlipBuffers()
  ExamineKeyboard()
Until KeyboardPushed(#PB_Key_Escape)
On commence par une boucle For Next qui ajoute à chaque tour de programme 5 particules avec le paramétrage indiqué entre parenthèse. Parmi les paramètres possibles on a la position x et y de départ, la gravité, la force, la vie etc...

Ensuite la fonction ListParticules(#Particules1) renvoie le nombre de particules présentes à l'écran, portant l'idenfiant #Particule1.

La boucle For next suivante permet de traiter une à une les particules identifiées par #Particules1.

En clair je teste la position en X de chaque particule et la vie de chaque et suivant si la particule sort du terrain ou que sa vie est à 0 je l'efface. Sinon on met à jour les différentes coordonnées et valeur des particules et on les affiche avec AfficheParticules().

Dans ce code il ya un second paramètre qui s'appelle "pouet" et qui vient de la boucle for next. En fait c'est le numero de la particule traitée. On l'identifiant puis son numéro ou plutôt si vuos préferez son numéro de groupe et son numero personnel. Ainsi il est possible de gérer particule par particule ou tout un groupe tout dépend ce que vous voulez faire.

Voilà, je travaille toujours dessus, je vous tiendrez au jus.
Pour le moment j'ai codé ces fonctions :

AjoutParticules() => Ajoute des particules
UpdateParticules() => Met à jour après traitement
AfficheParticules() => Ben pour les afficher
ListParticules() => Liste le nb de particules d'un groupe donné
PositionX() => Renvoie la position en X de la particule sélectionnée
PositionY() => Renvoie la position en Y de la particule sélectionnée
Vie() => Renvoie la valeur de la vie de la particule sélectionnée
EffaceElement() => Efface la particules courante
SetPartPosx() => Paramétre la position en X de la particule sélectionnée
SetPartPosy() => Paramètres la position en Y de la particule sélectionnée

Voilou :)
Avatar de l’utilisateur
Crystal Noir
Messages : 892
Inscription : mar. 27/janv./2004 10:07

Message par Crystal Noir »

bon ben...

Je vous tiens au courant de la première release.
Avatar de l’utilisateur
Crystal Noir
Messages : 892
Inscription : mar. 27/janv./2004 10:07

Message par Crystal Noir »

Je voulais savoir, qu'en pensez vous ? avez vous des suggestions ? Je sais vous n'avez pas encore entre les mains, mais pensez vous que ca pourrait intéresser les gens d'avoir un système du genre ?

Je suis en train de travailler sur l'intégration de sprites différents. C'est à dire que un groupe de particules pourra avoir des sprites différents, sans que ce soit toujours les mêmes.
Heis Spiter
Messages : 1092
Inscription : mer. 28/janv./2004 16:22
Localisation : 76
Contact :

Message par Heis Spiter »

De mon côté, je pense que ca peut-être utile, le seul hic, c'est que je risque pas de l'utiliser de si tôt ! :?
Heis Spiter, webmaster du site http://www.heisspiter.net
Développeur principal et administrateur du projet Bird Chat
Parti courir au bonheur du dév. public et GPL :D
Avatar de l’utilisateur
Crystal Noir
Messages : 892
Inscription : mar. 27/janv./2004 10:07

Message par Crystal Noir »

pas grave, meme si il sert à personne, au moins j'aurais fait un truc :lol:
comtois
Messages : 5186
Inscription : mer. 21/janv./2004 17:48
Contact :

Message par comtois »

Voila c'est ça qu'il faut se dire :)

Si ça sert à quelqu'un tant mieux ,sinon faut le faire pour soi déjà :)


Sinon je préfère faire les choses par moi même , et m'inspirer de ce qui a été fait quand je coince , donc ton générateur pourra me servir si un jour j'en ai besoin ( pour l'instant je suis sur mon éditeur de map 3D ) , ne serait-ce que pour recopier des bouts de code :)
garzul
Messages : 683
Inscription : mer. 26/mai/2004 0:33

Message par garzul »

Trés bien bravo je l'attend avec impatience :)
Avatar de l’utilisateur
Thyphoon
Messages : 2706
Inscription : mer. 25/août/2004 6:31
Localisation : Eragny
Contact :

Message par Thyphoon »

Bon je vais être un peu idiot mais visuellement qu'est ce que ça permet de faire ? Est ce que ça permet de faire des effets de jet d'eau ? de feu ? de fumée ? de brouillard ? Est ce que c'est rapide ?
Car tout ça peut m'interesser pour l'integration de certain effet dans mon jeu! :P
Avatar de l’utilisateur
Crystal Noir
Messages : 892
Inscription : mar. 27/janv./2004 10:07

Message par Crystal Noir »

oui c'est ca c pour faire des particules de pluies, d'eau de feu etc....

Tu peux tester des choses que j'ai essayé de faire avec ici :

http://purebasic.hmt-forum.com/viewtopic.php?t=1001

C loin d'être fini mais ca marche pas mal :p
Avatar de l’utilisateur
Chris
Messages : 3731
Inscription : sam. 24/janv./2004 14:54
Contact :

Message par Chris »

Crystal Noir a écrit :oui c'est ca c pour faire des particules de pluies, d'eau de feu etc....
Homme blanc donner eau de feu à grand chef, :drinking: et grand chef devenir fou, alors moi, scalper homme blanc.

Hugh!!!! :lol:

:jesors:
Avatar de l’utilisateur
Thyphoon
Messages : 2706
Inscription : mer. 25/août/2004 6:31
Localisation : Eragny
Contact :

Message par Thyphoon »

mmmmmm tres interessants ! Les exemples que tu donnes sont pas trop mal ! je pense que ça vas me servir une fois que tu aura finit !
Des que tu as un exemple pour faire du feu n'hesite pas a poster un exemple !! :oP
Avatar de l’utilisateur
Crystal Noir
Messages : 892
Inscription : mar. 27/janv./2004 10:07

Message par Crystal Noir »

quel genre de feu tu recherches ? :)

car généralement sur un feu tu as le feu en sprite et les résidus en particules :) (les braises par ex qui s'envolent).
Avatar de l’utilisateur
Thyphoon
Messages : 2706
Inscription : mer. 25/août/2004 6:31
Localisation : Eragny
Contact :

Message par Thyphoon »

Et bien en vérité toute sorte de feu lolllllll :lol:
ça vas du nuage de fumée a la simple flame de briqué en passant par les explosions, le chalumeau, etc...
:P
Tient une question sur l'exemple que tu donnes avec la pluie...est ce qu'avec ton système imaginons que nous avons des coups de vent alléatoire, est ce que les goutes de pluies peuvent varier selon ce paramettre ou bien une fois que la direction, la force etc... la particule vas son chemin ?
Avatar de l’utilisateur
Crystal Noir
Messages : 892
Inscription : mar. 27/janv./2004 10:07

Message par Crystal Noir »

ce n'est pas encore fait mais normalement il sera possible d'agir sur un groupe de particule en modifiant certains paramètres.

Pour l'histoire du feu, je tiens à préciser que c un moteur entièrement 2D (pas de 3D). Justement j'ai fait ca pour ceux qui veulent pas utiliser forcément le moteur 3d de pure à ce sujet.

Généralement comme j'ai dit plus haut les particules ne ont pas les flammes mais leurs résidus. Nous ne sommes pas (pour le moment) dans un système de particle type Flare 3D (bien qu'on pourra utiliser des images).

Cela dit je projette de pouvoir utiliser des images, mais aussi des images animées (animation de sprite en tant que particules) mais ce n'est pas encore fait.

Donc il sera toujours possible de faire des choses. pour le moment mon projet en est au stade alpha. Mais je vous montrerai bientôt quelle tronche ca a en prog.
Avatar de l’utilisateur
Crystal Noir
Messages : 892
Inscription : mar. 27/janv./2004 10:07

Message par Crystal Noir »

Voici une autre petite démo sans graphisme de CPS. C'est tout simple mais ca marche bien :wink:

=>Télécharger CpsDemo<=

Pour ceux qui n'ont pas vu les autres d'avant :

=>Effet volcan<=

=>Effet neige<=

=>Effet orage et pluie<=
Répondre