Forums Casio - Vos tutoriels et astuces

Index du Forum | Vos tutoriels et astuces | [Tutorial] Effet de particule en Basic
Ninestars
Hors ligne
Membre
Niveau: Confirmé
Points: 1877
Défis: 22
Message
Posté le 09/02/2013 12:19

[Tutorial] Effet de particule en Basic :

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
Niveau: Confirmé
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
Niveau: Élite
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
Niveau: Élite
Points: 5513
Défis: 57
Message
Citer : Posté le 09/02/2013 18:44 | #
Je ressors mon vieux moteur de particules?
Dark storm
Hors ligne
Administrateur
Niveau: Aucun
Points: 10101
Défis: 170
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
Páranÿe quetë Quendya
Alex BasicC
Hors ligne
Ancien modérateur
Niveau: Élite
Points: 1696
Défis: 74
Message
Citer : Posté le 09/02/2013 18:57 | #
Exellent tuto :
Ninestars
Hors ligne
Membre
Niveau: Confirmé
Points: 1877
Défis: 22
Message
Citer : Posté le 09/02/2013 19:21 | #
Merci tout le monde
----------------------------------
Ziqumu
Hors ligne
Membre d'honneur
Niveau: Intermédiaire
Points: 2918
Défis: 9
Message
Citer : Posté le 09/02/2013 21:45 | #
Sympa comme tuto
Limachi
Hors ligne
Youtuber
Niveau: Élite
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
Niveau: Vétéran
Points: 15805
Défis: 94
Message
Citer : Posté le 11/02/2013 17:34 | #
J'avoue, je n'ai lu ton tutoriel, mais bel effort de présentation !
----------------------------------
Louloux
Hors ligne
Ancien administrateur
Niveau: Élite
Points: 7007
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
Niveau: Confirmé
Points: 1877
Défis: 22
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
Niveau: Élite
Points: 7007
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...


Index du Forum | Vos tutoriels et astuces | [Tutorial] Effet de particule en Basic

Planète Casio v42 © créé par Neuronix et Muelsaco 2004 - 2018 | Il y a 72 connectés | Nous contacter | Qui sommes-nous ? | Licences et remerciements

Casio Education Casiopeia CodeWalrus

Planète Casio est un site communautaire indépendant, géré bénévolement et n'est donc pas affilié à Casio | Toute reproduction de Planète Casio, même partielle, est interdite
Les fichiers, programmes et autres publications présents sur Planète Casio restent la propriété de leurs auteurs respectifs et peuvent être soumis à des licences ou des copyrights.
CASIO est une marque déposée par CASIO Computer Co., Ltd