Page 1 sur 2
Feu de cheminée
Publié : mar. 12/janv./2016 14:52
par Flype
Je vous partage un petit effet de feu pour la forme.
Code : Tout sélectionner
;====================================
; Fire Effect, flype
;====================================
EnableExplicit
#W = 200
#H = 150
#Z = 2
Global Dim pix.l(#W+2, #H+2)
;====================================
Procedure FireEffect_Calc()
Protected x, y
For y = 0 To #H + 1
For x = 1 To #W - 1
pix(x, y) = (pix(x-1, y) + pix(x+1, y) + pix(x, y+1) + pix(x, y+1)) >> 2
Next
Next
EndProcedure
Procedure FireEffect_Draw()
Protected x, y
If StartDrawing(CanvasOutput(0))
For y = 0 To #H - 1
For x = 0 To #W - 1
Box(x*#Z, y*#Z, #Z, #Z, pix(x, y))
Next
Next
StopDrawing()
EndIf
EndProcedure
Procedure FireEffect_Feed()
Protected i
; Modifier le pas (step) pour modifier l'intensité du feu !
For i = 0 To 255 Step 32
pix(Random(#W, 0), #H+2) = i
Next
EndProcedure
Procedure FireEffect_Update()
FireEffect_Calc()
FireEffect_Feed()
FireEffect_Draw()
EndProcedure
;====================================
If OpenWindow(0, 0, 0, #W*#Z, #H*#Z, "Fire Effect", #PB_Window_SystemMenu|#PB_Window_ScreenCentered)
CanvasGadget(0, 0, 0, #W*#Z, #H*#Z)
AddWindowTimer(0, 0, 5)
BindEvent(#PB_Event_Timer, @FireEffect_Update(), 0, 0)
Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
EndIf
;====================================
Re: Feu de cheminée
Publié : mar. 12/janv./2016 16:11
par nico

, j'adore l'effet.
Re: Feu de cheminée
Publié : mar. 12/janv./2016 16:20
par GallyHC
Bonjour,
Vraiment sympa, je me suis permis "
http://www.pbfrance.com/?url=source&cmd=viewer&val=78", si cela ne dérange pas.
Cordialement,
GallyHC
Re: Feu de cheminée
Publié : mar. 12/janv./2016 16:39
par Flype
@gallyhc
Pas de souci
Il y a de quoi s'amuser avec çà - voici une variante :
- Clic gauche / Clic droit pour réinitialiser la "chambre de combustion"
- Mouvement de la souris pour dessiner dans le feu.
- Boostage du feu dans FireEffect_Feed() avec Min(i*3, 255).
Re: Feu de cheminée
Publié : mar. 12/janv./2016 16:45
par Flype
Pour changer la couleur en vert par exemple,
modifier juste çà (bon ok un feu vert c'est chelou

) :
par

Re: Feu de cheminée
Publié : mar. 12/janv./2016 16:57
par Flype
Choix de couleurs assez sympa :
Code : Tout sélectionner
;====================================
; Fire Effect, flype
;====================================
EnableExplicit
#W = 200
#H = 150
#Z = 2
Global pow = 30
Global Dim pix.l(#W+2, #H+2)
;====================================
Procedure Clamp(x, min, max)
If x > max
ProcedureReturn max
EndIf
If x < min
ProcedureReturn min
EndIf
ProcedureReturn x
EndProcedure
Procedure FireEffect_Calc()
Protected x, y
For y = 0 To #H + 1
For x = 1 To #W - 1
pix(x, y) = (pix(x-1, y) + pix(x+1, y) + pix(x, y+1) + pix(x, y+1)) >> 2
Next
Next
EndProcedure
Procedure FireEffect_Clear(color)
Protected x, y
For y = 0 To #H + 2
For x = 0 To #W + 2
pix(x, y) = color
Next
Next
EndProcedure
Procedure FireEffect_Draw()
Protected x, y
If StartDrawing(CanvasOutput(0))
For y = 0 To #H - 1
For x = 0 To #W - 1
Box(x*#Z, y*#Z, #Z, #Z, RGB(255, pix(x, y), 0))
Next
Next
DrawingMode(#PB_2DDrawing_Transparent)
DrawText(10, 10, Str(pow), $00ffff)
StopDrawing()
EndIf
EndProcedure
Procedure FireEffect_Feed()
Protected i
For i = 0 To 5
pix(Random(#W, 0), #H+2) = Clamp(Random(pow, 1)*2, 0, 255)
Next
EndProcedure
Procedure FireEffect_FeedMouse(color)
Protected x, y
Protected md = Random(20, 0)
Protected mx = ( WindowMouseX(0) + 1 ) / #Z
Protected my = ( WindowMouseY(0) + 1 ) / #Z
For y = -md To md
For x = -md To md
pix(Clamp(mx + x, 0, #W), #H+2) = color
Next
Next
EndProcedure
Procedure FireEffect_Pow()
pow + ( 5 * GetGadgetAttribute(0, #PB_Canvas_WheelDelta) )
pow = Clamp(pow, 1, 255)
EndProcedure
Procedure FireEffect_Update()
FireEffect_Calc()
FireEffect_Feed()
FireEffect_Draw()
FireEffect_FeedMouse(Random(200, 128))
EndProcedure
;====================================
If OpenWindow(0, 0, 0, #W*#Z, #H*#Z, "Fire Effect", #PB_Window_SystemMenu|#PB_Window_ScreenCentered)
CanvasGadget(0, 0, 0, #W*#Z, #H*#Z)
FireEffect_Clear(0)
Repeat
Select WaitWindowEvent(1)
Case #PB_Event_Gadget
Select EventType()
Case #PB_EventType_MouseWheel: FireEffect_Pow()
Case #PB_EventType_LeftClick: FireEffect_Clear(255)
Case #PB_EventType_RightClick: FireEffect_Clear(0)
EndSelect
Case #PB_Event_CloseWindow
Break
EndSelect
FireEffect_Update()
ForEver
EndIf
;====================================
Re: Feu de cheminée
Publié : mar. 12/janv./2016 17:43
par Micheao
ton code marche trés mal quand je lance ça marche que 2 secondes et j'ai l"erreur : en ligne 68 Index de tableau Hors limite
Re: Feu de cheminée
Publié : mar. 12/janv./2016 18:01
par Flype
Exact merci, j'avais zappé un truc - corrigé dans code ci-dessus - et désactive le debugger c'est gourmand.
Re: Feu de cheminée
Publié : mar. 12/janv./2016 18:21
par nico
J'ai une erreur en ligne 59, min ne peur être supérieur à max.
Re: Feu de cheminée
Publié : mar. 12/janv./2016 18:32
par Flype
@Nico
"min ne peut être supérieur à max" ?
Tu utilises quelle version de PB ?
Perso, je suis sous 5.41 LTS (x64) Linux.
C'est comme si tu avais une userlib avec les fonctions Min et Max déjà implémentées.
Essayes de changer Min en Min2.
Re: Feu de cheminée
Publié : mar. 12/janv./2016 18:47
par nico
PureBasic 5.41 x64, même en changeant min par min2, j'ai toujours la même erreur, pareil sur 5.41 x86.
Re: Feu de cheminée
Publié : mar. 12/janv./2016 19:05
par Flype
Ah ok j'ai compris - c'était dans la fonction random() - désolé.
Corrigé dans code précédent.
Je ne sais pas pour vous mais je viens de tester sous Windows et çà rame - çà vient peut-être du pauvre CPU de mon portable mais tout de même.
EDIT: Non çà ne vient pas du CPU mais du Timer qui ne réagit pas du tout pareil que sur mon Linux.
Si vous trouvez que çà rame - déplacez l'appel à la fonction FireEffect_Update() juste avant ForEver tout en bas du code, désactivez le timer et mettre WaitWindowEvent(1), bizarre quand même.
Re: Feu de cheminée
Publié : mar. 12/janv./2016 21:35
par Flype
Ah bah oui, je ne savais pas qu'on pouvait faire du feu vert et même violet, merci pour la vidéo.
Re: Feu de cheminée
Publié : mar. 12/janv./2016 23:01
par nico
Ok, c'est bon.
Re: Feu de cheminée
Publié : mar. 12/janv./2016 23:21
par Flype
cool