
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)
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
