Page 1 sur 5

LiXu.pbi : Animation & Particule 2D

Publié : dim. 28/juin/2015 22:25
par falsam
Version 1.6 (17 Juillet 2015)

Presque tout est dans le titre. Lixu.pbi est un module qui vous permettra de :
-Ajouter des animations à vos sprites.
-Créer des émetteurs de particules type point ou box.
-Créer des SpriteScroll pour gérer vos scrolling paralax ou pas.

Téléchargement
:arrow: https://github.com/pbcodex/2D-LiXu/archive/master.zip

Re: LiXu.pbi : Animation & Particule 2D

Publié : lun. 29/juin/2015 1:14
par Ar-S
ça parait pas mal du tout, merci !

Re: LiXu.pbi : Animation & Particule 2D

Publié : lun. 29/juin/2015 9:12
par falsam
Merci Ar-S. Puisque tu es sous linux, pourrais tu me dire si ça fonctionne ?

Re: LiXu.pbi : Animation & Particule 2D

Publié : lun. 29/juin/2015 10:08
par blendman
Excellent !
Je crois bien que je pourrais même m'en servir dans mon soft de dessin animatoon, car j'ai prévu d'ajouter des particules.


Un petit ajout tout simple (gérer la transparence avec le temps et aussi un système de particules ressemblant à des lucioles) :

L'exemple :

Code : Tout sélectionner

;Lixu - Create emitter (#Particle_AllDir)
; 06/2015

IncludeFile "lixu.pbi"

If InitSprite()
  InitKeyboard()
  InitMouse()
EndIf

UseModule lixu

OpenWindow(0, 0, 0, 800, 600, "Lixu Particle", #PB_Window_SystemMenu|#PB_Window_ScreenCentered)
OpenWindowedScreen(WindowID(0), 0, 0, 800, 600)

; ShowCursor_(1) ; pour voir le curseur ^^

;Create particles emitter
lixu::EmitterCreate("example", #Particle_AllDir)
lixu::ParticleRate("example", 150)
lixu::ParticleColorsRange("example", RGB(255, 0, 0), RGB(0, 0, 255), 10)
lixu::ParticleSizeRange("example", 10, 60)
lixu::ParticleSpeedRange("example", -2, -2, 2, 2)
lixu::ParticleTimeToLife("example", 300)

;Events Loop
Repeat  ;Window
  Repeat ;Screen
    Event = WindowEvent()
     
    Select Event    
      Case #PB_Event_CloseWindow
        End
    EndSelect  
  Until Event=0
    
  FlipBuffers()
  ClearScreen(RGB(255, 255, 255))
  ExamineKeyboard()
  ExamineMouse()
  
  ;Play emitter
  lixu::EmitterPlay("example", MouseX(), MouseY())
  
Until KeyboardPushed(#PB_Key_Escape)


Modifier dans ton module :

Code : Tout sélectionner

; ajouter ça :
#Particle_AllDir = 10 ; en dehors du module


  Procedure EmitterPlay(Emitter.s, x = 0, y = 0, Loop = #True)
    If FindMapElement(Emitters(), Emitter)
        
      ForEach Emitters()\Particle()
      
        With Emitters()\Particle()        
          If \LifeTime <= 0 
            \Actif = #False
            \LifeTime = Random(Emitters()\LifeTime) 
          
            If Emitters()\Type = #PB_Particle_Box
              \x = Random(Emitters()\Width) + x
              \y = y 
            ElseIf Emitters()\Type = #PB_Particle_Point
              \x = x
              \y = y              
            ElseIf Emitters()\Type = 10 ; #Particle_AllDir   ;< ------------------------------ modification ici
              \x = Random(Emitters()\Width) - Random(Emitters()\Width) ; ----------------- modification ici
              \y = Random(Emitters()\Height) - Random(Emitters()\Height);----------------- modification ici
            EndIf
          EndIf
        
          \x + \vx
          \y + \vy 
        
          If \LifeTime > 0
            ZoomSprite(\Sprite, \Size, \Size)
            RotateSprite(\Sprite, \Rotate, #PB_Relative)           
            DisplayTransparentSprite(\Sprite, \x , \y , \lifetime, \Color) ; <------------------ modification ici (changement dans l'alpha)
          EndIf 
        
          \LifeTime - 1
        
        EndWith
        
      Next
      
      Emitters()\Actif = #False
    EndIf
    
  EndProcedure
D'ailleurs, en testant le spriteBlendingMode(), on remarque que c'est bugué si on change la couleur d'un sprite :(

ps :Tu peux aussi le mettre dans trucs & astuces ;)

Re: LiXu.pbi : Animation & Particule 2D

Publié : lun. 29/juin/2015 10:47
par Micheao
Merci Falsam c'est de la bombe ton module je m'en vais étudier les exemples

Re: LiXu.pbi : Animation & Particule 2D

Publié : lun. 29/juin/2015 11:32
par venom
Salut

Il a l'air sympa ce petit module. J'ai hâte de pouvoir tester ça :P
Merci falsam







@++

Re: LiXu.pbi : Animation & Particule 2D

Publié : lun. 29/juin/2015 12:24
par Kwai chang caine
Marche nickel sur un portable W7
Super joli, il me plait le petit zebulon :mrgreen:
Chouettes les montagnes derrieres..
En un mot tout me plait :D

Merci du partage 8)

Re: LiXu.pbi : Animation & Particule 2D

Publié : lun. 29/juin/2015 14:25
par majikeyric
WOW! 8O ça c'est de la belle ouvrage ! :)
Merci pour le partage falsou ! :mrgreen:

Re: LiXu.pbi : Animation & Particule 2D

Publié : lun. 29/juin/2015 16:30
par falsam
Merci tout le monde pour ces commentaires. :)
blendman a écrit :Un petit ajout tout simple (gérer la transparence avec le temps et aussi un système de particules ressemblant à des lucioles) :
la transparence est prévu. D'ailleurs tu as du voir la variable Opacity.i dans la structure d'une particule.
Quand au luciole tu peux faire un sprite qui remplacera celui par défaut.
blendman a écrit :#Particle_AllDir = 10 ; en dehors du module
Insolent que tu es :mrgreen:
Tu places ça dans la section déclarative du module lixu

Code : Tout sélectionner

DeclareModule Lixu  
  #Particle_AllDir = 10 
Je me suis servi des constantes de PureBasic pour définir le type de particules. Plutot que #Particle_AllDir, je vais plutôt modifier la procédure EmitterPlay() en ne rendant pas obligatoire la position x et y et utiliser la constante #pb_ignore pour définir le type de particule.

Re: LiXu.pbi : Animation & Particule 2D

Publié : lun. 29/juin/2015 16:43
par falsam
majikeyric a écrit :falsou
<3 :mrgreen: héhé

Re: LiXu.pbi : Animation & Particule 2D

Publié : lun. 29/juin/2015 16:53
par falsam
@Blendman: Ton code aprés mise à jour de lixu.pb

Code : Tout sélectionner

;Lixu - Create emitter en ignorant le type de boite

IncludeFile "lixu.pbi"

InitSprite()
InitKeyboard()
InitMouse()

UseModule lixu

OpenWindow(0, 0, 0, 800, 600, "Lixu Particle", #PB_Window_SystemMenu|#PB_Window_ScreenCentered)
OpenWindowedScreen(WindowID(0), 0, 0, 800, 600)

;Create particles emitter
lixu::EmitterCreate("example", #PB_Ignore)

lixu::ParticleRate("example", 150)
lixu::ParticleColorsRange("example", RGB(255, 0, 0), RGB(0, 0, 255), 10)
lixu::ParticleSizeRange("example", 10, 60)
lixu::ParticleSpeedRange("example", -2, -2, 2, 2)
lixu::ParticleTimeToLife("example", 300)

;Events Loop
Repeat  ;Window
  Repeat ;Screen
    Event = WindowEvent()
     
    Select Event    
      Case #PB_Event_CloseWindow
        End
    EndSelect  
  Until Event=0
    
  ClearScreen(RGB(255, 255, 255))
  ExamineKeyboard()
  ExamineMouse()
  
  ;Play emitter (Inutile de préciser la position x y)
  lixu::EmitterPlay("example")

  FlipBuffers()
  
Until KeyboardPushed(#PB_Key_Escape)

Re: LiXu.pbi : Animation & Particule 2D

Publié : lun. 29/juin/2015 18:14
par blendman
falsam a écrit :Insolent que tu es :mrgreen:
oui, j'insole (du verbe insoler : être insolent ^^, verbe que je viens d'inventer :mrgreen: ).
En fait, je ne connaissais pas les modules avant ton code, donc, je n'avais pas vu que je pouvais déclarer la constante dans DeclareModule ;).
J'ai juste modifier deux trois trucs un peu à l'arrache ^^

mais il est bien classe ton code en tout cas ;)

Re: LiXu.pbi : Animation & Particule 2D

Publié : lun. 29/juin/2015 18:22
par falsam
Tu n'as rien inventé du tout, insoler existe http://la-conjugaison.nouvelobs.com/du/ ... nsoler.php

A cause de toi j'ai eu un doute sur insolent ou insolant.

Re: LiXu.pbi : Animation & Particule 2D

Publié : lun. 29/juin/2015 19:39
par blendman
falsam a écrit :Tu n'as rien inventé du tout, insoler existe http://la-conjugaison.nouvelobs.com/du/ ... nsoler.php
que nenni mon ami, je ne parle pas d'exposer à la lumière mais de faire son insolent :)

c'est comme le verbe retenir par exemple :
- se rappeler quelque chose
- empêcher de tomber.

Voilà, donc c'est décidé, on peut dire désormais "j'insole, oui, monsieur ! parfaitement."
:mrgreen:

(bon allez, j'arrête, il faut revenir à ton exemple de code ;) ^^)

Re: LiXu.pbi : Animation & Particule 2D

Publié : lun. 29/juin/2015 19:40
par Ar-S
Lorsque je lance la demo, j'ai eau des soucis aux loadsprite
Il faut mettre le chemin complet avec du / et pas du \
Ce qui donne comme exemple :

Code : Tout sélectionner

/home/ldv/Documents/PB/Lixu/data/dude.png
Ensuite ça se lance mais le screen est tout moisi. Celà ne vient pas de ton code mais de Xserver. Le pilote video de base...
Le soucis est que si je mets le pilote Nvidia, nul doute que ça passerai mais là c'est mon PLAYONLINUX qui saute et j'en ai besoin pour faire marcher mon soft de compta (windows) "Winiser"
---- edit ----
J'ai reussi à mettre Playonlinux et mes pilotes Nvidia, du coup LiXu marche (avec les modifs des paths des loadsprites)