Forum Casio - Vos tutoriels et astuces


Index du Forum » Vos tutoriels et astuces » [Tutorial] Effet de particule en Basic
NinestarsHors ligneMembrePoints: 2177 Défis: 22 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


TsuneoHors ligneMembrePoints: 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
LimachiHors ligneYoutuberPoints: 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)
EiyeronHors ligneAncien modérateurPoints: 5513 Défis: 57 Message

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


Je ressors mon vieux moteur de particules?
Dark stormHors ligneMembre d'honneurPoints: 10766 Défis: 174 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 BasicCHors ligneAncien modérateurPoints: 1734 Défis: 83 Message

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


Exellent tuto :
NinestarsHors ligneMembrePoints: 2177 Défis: 22 Message

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


Merci tout le monde
ZiqumuHors ligneMembre d'honneurPoints: 2918 Défis: 9 Message

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


Sympa comme tuto
LimachiHors ligneYoutuberPoints: 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)
TotoyoHors ligneMembre d'honneurPoints: 15905 Défis: 101 Message
LoulouxHors ligneAncien administrateurPoints: 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
NinestarsHors ligneMembrePoints: 2177 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 !
LoulouxHors ligneAncien administrateurPoints: 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...

Planète Casio v42 © créé par Neuronix et Muelsaco 2004 - 2019 | Il y a 29 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