Les membres ayant 30 points peuvent parler sur les canaux annonces, projets et hs du chat.
La shoutbox n'est pas chargée par défaut pour des raisons de performances. Cliquez pour charger.

Forum Casio - Vos tutoriels et astuces


Index du Forum » Vos tutoriels et astuces » [Tutorial] Effet de particule en Basic
Ninestars Hors ligne Membre Points: 2461 Défis: 24 Message

[Tutorial] Effet de particule en Basic

Posté le 09/02/2013 12:19

Avant de s'attaquer à ce tutorial il est important de comprendre l'utilisation du Drawstat.

Présentation :
Qu'est ce qu'un "effet de particule" ?
On en retrouve partout, il s'agit en fait de petites particules individuelles qui peuvent bouger pour donner des effets visuels comme par exemple la pluie, la neige, de l'eau, de la terre, ...
Toutes ces particules qui semblent avoir un comportement aléatoire et totalement indépendant des autres suivent en réalité un shéma commun, c'est à dire qui est possible de les gérer toutes en même temps avec des équations plus ou moins simples.


Le problème :
Le gros problème c'est que les performances de la calculatrice ne permettent pas de gérer beaucoup de particules, et que de plus, il faudrait calculer leur nouvelle position l'une après l'autre ce qui au bout d'une dizaine de particules rendrait les calcules trop long. En effet il faut pouvoir garder le maximum d'image par seconde pour obtenir un effet fluide et agréable.
C'est pourquoi il faut utiliser le "Calcul Listique", ce principe consiste à calculer directement avec les List au lieu de calculer chaque terme de la List.
Par exemple :
Ces codes multiplient par 2 une liste de nombres
{0,1,2,3,4,5}->List 1
For 1->I To 6
List1[I]x2->List 1[I]
Next

{0,1,2,3,4,5}->List 1
2xList 1->List 1

Vous voyez que le second code évite la boucle For qui est plus lente.
Juste pour information la première solution met 4,5 secondes pour 500 termes tandis que l'autre met 0,4 secondes !!!

Le "Calcul Listique" fonctionne avec toutes les opérations simples mais également avec les opérations plus complexes comme Cos, Int, Abs, Frac, Mod, ...

Le "Calcul Listique" :
Il existe plusieurs astuces :

Savoir si des termes d'une List sont inférieur à 0, ce qui est intéressant pour savoir si une particule sort de l'écran.
{1,7,-8,5,-2.98 0}->List 1
List 1<0->List 2

List 2 = {0,0,1,0,1,0}
Les comparateurs ( < > <= >= ) renvoie une List avec des valeurs binaires.

Savoir si un terme quelconque est inférieur à 0
{1,2,7}->List 1
Max(List 1<0)->M

M = 0
{-1,2,7}->List 1
Max(List 1<0)->M

M = 1

Il serait bien de pouvoir si une particule qui sort de l'écran par le bas (y<0) la remonter en haut de l'écran, c'est possible
{56,-9,30,-1}->List 1
Mod(List 1,64)->List 1

List 1 = {56, 55, 30, 63}
Attention : Mod ne fonctionne qu'avec des valeurs entières, on peut passer par d'autres autres solutions
{56.5,-9,30.31,-1.8}->List 1
Mod(Int List 1,64)+Frac List 1->List 1

List 1 = {56.5, 55, 30.31, 63.8}

Les effets de particules :
Pour réaliser des effets de particules, il faut que chaques particules disposent de ses propres coordonnées en x et en y correspondant à deux List utilisables directement par le Drawstat. On les appelera List "X" et List "Y".
Il faut en plus définir la vitesse de chaque particule afin qu'elles soient totalement indépendantes, on appelera List "VX" et List "VY" les composantes selon x et y de la vitesse.
Il faut aussi connaître une fonction Basic : RanList#(N) (OPTN F6 F3 F4 F5) qui permet de créer une List remplie de N nombres aléatoires dans l'intervalle [0;1[
Sans cette fonction pas de système de particule réaliste !

On va créer un simple effet de particules qui tombent de l'écran
'Nombre de particules
10->N
ViewWindow 1,127,1,1,63,1
'Initialisation des coordonnées aléatoires sur tout l'écran
128xRanList#(N)->List "X"
63xRanList#(N)->List "Y"
'On garde que la partie entière pour pouvoir utiliser la fonction Mod
Int List "X"->List "X"
Int List "Y"->List "Y"
'Initialisation du Drawstat
S-Graph1 DrawOn,Scatter,List "X",List "Y",1,Dot
'Boucle principale
While 1
'On baisse toutes les particules de 3 pixels
List "Y"-3->List "Y"
'On remonte toutes celles en bas de l'écran
Mod(List "Y",64)->List "Y"
'On efface puis on affiche
Cls
Drawstat
WhileEnd


Et voilà !
Simple non ?

Maintenant l'effet n'est pas très beau, les particules tombent toutes à la même vitesse et ont toute la même trajectoire. On peut l'améliorer !

'Nombre de particules
10->N
ViewWindow 1,127,1,1,63,1
'Initialisation des coordonnées aléatoires sur tout l'écran
128xRanList#(N)->List "X"
63xRanList#(N)->List "Y"
'Initialsation de la vitesse
2x(RanList#(N)-0.5)->List "VX"
2xRanList#(N)->List "VY"
'Initialisation du Drawstat
S-Graph1 DrawOn,Scatter,List "X",List "Y",1,Dot
'Boucle principale
While 1
'Calcul des nouvelles coordonnées
List "X"+List "VX"->List "X"
List "Y"-2-List "VY"->List "Y"
'On replace toutes celles en dehors de l'écran
Mod(Int List "X",128)+Frac List "X"->List "X"
Mod(Int List "Y",64)+Frac List "Y"->List "Y"
'On efface puis on affiche
Cls
Drawstat
WhileEnd


L'effet est déja mieux !

Je vous mes en pièce jointe 4 programmes que j'ai fait :
-Des objets qui tombent, appuiez sur EXE pour les faire sauter, les Fleches pour fixer la limite.
-De la neige
-De la pluie
-Des éclairs
Ces programmes sont optimisés pour gagner un maximum de performance, je les ai commenté pour qu'ils soient plus compréhensible.


Fichier joint


Tsuneo Hors ligne Membre Points: 973 Défis: 51 Message

Citer : Posté le 09/02/2013 13:32 | #


Ah, tu as enfin mis ton tuto !
En tout cas bravo, on comprend facilement !

Calculatrices : Graph 35+ USB tweakée et Classpad 330
Suivez moi et mon humour dévastateur ici focliquéla
Limachi Hors ligne Youtuber Points: 2798 Défis: 67 Message

Citer : Posté le 09/02/2013 16:34 | #


Sympathique, il peut même être utile en C pour des effets de particules... (pour peux qu'on le traduise, mais bon, la plus part des programmeurs n’orront pas trop de mal a le faire, je pense).
Mes Programmes
Cliquer pour enrouler
-en basic: un programme nommé PICFMLIM convertissant une picture en code basic.
-en C:
-Un pong.
-Un projet en pause. Je compte le reprendre de temps en temps: Summer Cursed


-mon tuto sur les Str


Mes calto: G25+, G75
Mon minecraft en dévelopement


Projets et Programmes que je soutiens (sur une idée de Marmotti)
Cliquer pour enrouler
-Pokemon Jade de Dodormeur
-Portal2D de JavierXD
-CalCraft de Wime
-GeekBros du groupe GeekBrothers (Eiyeron,Siapran,KevKevVTT,Adbook,LIMachi)
Eiyeron Hors ligne Ancien modérateur Points: 5525 Défis: 57 Message

Citer : Posté le 09/02/2013 18:44 | #


Je ressors mon vieux moteur de particules?
Dark storm Hors ligne Labélisateur Points: 11629 Défis: 176 Message

Citer : Posté le 09/02/2013 18:54 | #


Super tuto !
Et de qualité en plus
Finir est souvent bien plus difficile que commencer. — Jack Beauregard
Alex BasicC Hors ligne Ancien modérateur Points: 1734 Défis: 83 Message

Citer : Posté le 09/02/2013 18:57 | #


Exellent tuto :
Ninestars Hors ligne Membre Points: 2461 Défis: 24 Message

Citer : Posté le 09/02/2013 19:21 | #


Merci tout le monde
Ziqumu Hors ligne Membre d'honneur Points: 3055 Défis: 9 Message

Citer : Posté le 09/02/2013 21:45 | #


Sympa comme tuto
Limachi Hors ligne Youtuber Points: 2798 Défis: 67 Message

Citer : Posté le 09/02/2013 23:52 | #


Eiyeron a écrit :
Je ressors mon vieux moteur de particules?

Je veux biens le voir
@Eiyeron:(c'est celui dans le DB, non?)
Mes Programmes
Cliquer pour enrouler
-en basic: un programme nommé PICFMLIM convertissant une picture en code basic.
-en C:
-Un pong.
-Un projet en pause. Je compte le reprendre de temps en temps: Summer Cursed


-mon tuto sur les Str


Mes calto: G25+, G75
Mon minecraft en dévelopement


Projets et Programmes que je soutiens (sur une idée de Marmotti)
Cliquer pour enrouler
-Pokemon Jade de Dodormeur
-Portal2D de JavierXD
-CalCraft de Wime
-GeekBros du groupe GeekBrothers (Eiyeron,Siapran,KevKevVTT,Adbook,LIMachi)
Totoyo Hors ligne Membre d'honneur Points: 16093 Défis: 102 Message
Louloux Hors ligne Ancien administrateur Points: 7035 Défis: 61 Message

Citer : Posté le 12/02/2013 19:16 | #


Pas mal ce tuto.

Je souligne que le calcul listique est très utile lorsqu'on dessine des sprites
Ninestars Hors ligne Membre Points: 2461 Défis: 24 Message

Citer : Posté le 13/02/2013 18:00 | #


Merci.
Oui on peut l'utiliser pour faire des symétriques, des zooms, et même des rotations !
Louloux Hors ligne Ancien administrateur Points: 7035 Défis: 61 Message

Citer : Posté le 13/02/2013 19:11 | #


Pour les rotations c'est pratique effectivement. J'ai fait un petit code d'exemple sympa où on donne le nombre de côtés d'un polygone régulier et on peut le faire tourner. Si ça vous intéresse...

LienAjouter une imageAjouter une vidéoAjouter un lien vers un profilAjouter du codeCiterAjouter un spoiler(texte affichable/masquable par un clic)Ajouter une barre de progressionItaliqueGrasSoulignéAfficher du texte barréCentréJustifiéPlus petitPlus grandPlus de smileys !
Cliquez pour épingler Cliquez pour détacher Cliquez pour fermer
Alignement de l'image: Redimensionnement de l'image (en pixel):
Afficher la liste des membres
:bow: :cool: :good: :love: ^^
:omg: :fusil: :aie: :argh: :mdr:
:boulet2: :thx: :champ: :whistle: :bounce:
valider
 :)  ;)  :D  :p
 :lol:  8)  :(  :@
 0_0  :oops:  :grr:  :E
 :O  :sry:  :mmm:  :waza:
 :'(  :here:  ^^  >:)

Σ π θ ± α β γ δ Δ σ λ
Veuillez donner la réponse en chiffre
Vous devez activer le Javascript dans votre navigateur pour pouvoir valider ce formulaire.

Si vous n'avez pas volontairement désactivé cette fonctionnalité de votre navigateur, il s'agit probablement d'un bug : contactez l'équipe de Planète Casio.

Planète Casio v4.3 © créé par Neuronix et Muelsaco 2004 - 2024 | Il y a 39 connectés | Nous contacter | Qui sommes-nous ? | Licences et remerciements

Planète Casio est un site communautaire non affilié à Casio. Toute reproduction de Planète Casio, même partielle, est interdite.
Les programmes et autres publications présentes sur Planète Casio restent la propriété de leurs auteurs et peuvent être soumis à des licences ou copyrights.
CASIO est une marque déposée par CASIO Computer Co., Ltd