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
