La galère des réglages des couleurs de sprites
Publié : sam. 22/nov./2025 21:45
Salut a toutes et a tous,
Depuis les quelques dernières versions de PureBasic, il y a eu des changements dans les sprites niveau alpha.
Personnellement, je n'y comprend rien du tout.
Voici un code qui affiche 5 grosses billes (qui devraient être rouges) et 5 billes plus petites (qui devraient être vertes). Hors, je ne comprend pas comment régler leurs couleurs. La seule chose qui marche, c'est que la couleur noire est transparente.
Depuis les quelques dernières versions de PureBasic, il y a eu des changements dans les sprites niveau alpha.
Personnellement, je n'y comprend rien du tout.
Voici un code qui affiche 5 grosses billes (qui devraient être rouges) et 5 billes plus petites (qui devraient être vertes). Hors, je ne comprend pas comment régler leurs couleurs. La seule chose qui marche, c'est que la couleur noire est transparente.
Code : Tout sélectionner
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;; debut du code : le 10 novembre 2025
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
InitSprite()
InitKeyboard()
ExamineDesktops()
drx = DesktopWidth(0)
dry = DesktopHeight(0)
OpenScreen(drx,dry,32,"Sprite")
;Création du sprite
CreateSprite(1,drx,dry)
StartDrawing(SpriteOutput(1))
r=Random(55)
v=Random(55)
b=Random(55)
r2=Random(1)*2-1
v2=Random(1)*4-2
b2=Random(1)*6-3
For i=0 To dry
LineXY(0,i,drx,i,RGB(r,v,b))
r+r2
If r>100 Or r<0
r2*-1
r+r2
EndIf
v+v2
If v>100 Or v<0
v2*-1
v+v2
EndIf
b+b2
If b>100 Or b<0
b2*-1
b+b2
EndIf
Next
StopDrawing()
;;;;;;;;;;;
CreateSprite(0,drx,dry,#PB_Sprite_AlphaBlending | #PB_Sprite_Transparent )
StartDrawing(SpriteOutput(0))
DrawingMode( #PB_2DDrawing_AlphaBlend )
For i=1 To 100
a=Random(drx)
b=400+Random(dry)
c=Random(drx)
d=400+Random(dry)
LineXY(a,b,c,d,RGBA(1+Random(254),Random(255),Random(255),255))
LineXY(a,b+1,c,d+1,RGBA(1+Random(254),Random(255),Random(255),255))
Next
LineXY(0,0,60,dry,RGBA(255,255,255,255))
LineXY(drx,0,drx-60,dry,RGBA(255,255,255,255))
LineXY(10,200,500,230,RGBA(255,255,255,255))
LineXY(512,230,800,180,RGBA(255,255,255,255))
LineXY(0,dry-30,drx,dry-30,RGBA(255,255,255,255))
StopDrawing()
;;;;;;;;;;;
CreateSprite(2,11,11,#PB_Sprite_AlphaBlending | #PB_Sprite_Transparent )
StartDrawing(SpriteOutput(2))
DrawingMode(#PB_2DDrawing_Gradient | #PB_2DDrawing_AlphaBlend )
Circle(5,5,5,RGBA(255,0,0,255))
StopDrawing()
;;;;;;;;;;;
StartDrawing(ScreenOutput())
DrawingMode(#PB_2DDrawing_Gradient | #PB_2DDrawing_AlphaBlend )
Circle(5,7,3,RGBA(0,255,0,255))
StopDrawing()
GrabSprite(3,0,0,11,11, #PB_Sprite_AlphaBlending)
;Affichage du sprite
;DisplayTransparentSprite(0, 0, 0)
;FlipBuffers()
;Delay(2400)
;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;
;ClearScreen(0)
;DisplayTransparentSprite(0, 0, 0)
Dim p.b(drx,dry)
StartDrawing(SpriteOutput(0))
For i=0 To drx-1
For u=0 To dry-1
If Point(i,u)<>0
p(i,u)=1
EndIf
Next
Next
StopDrawing()
TempsDepart.q = ElapsedMilliseconds() ; Récupère la valeur actuelle
; StartDrawing(ScreenOutput())
; For i=0 To 1919
; For u=0 To 1079
; If P(i,u)<>0
; Plot(i,u,RGB(255,255,255))
; EndIf
;
; Next
; Next
; StopDrawing()
DisplayTransparentSprite(0, 0, 0)
TempsEcoule.q = ElapsedMilliseconds()-TempsDepart ; La valeur 'TempsEcoule' devrait être d'environ 1000 millisecondes
; Debug "Temps écoulé : "+Str(TempsEcoule)+" millisecondes"
;FlipBuffers()
;Delay(1000)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; D E B U T ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
cmb_de_bestioles=10
Dim lax(cmb_de_bestioles)
Dim lay(cmb_de_bestioles)
Dim sens(cmb_de_bestioles)
For i=1 To cmb_de_bestioles
lax(i)=Random(500)+400
lay(i)=Random(100)+10
sens(i)=Random(1)*2-1
Next
;;;
;;;;;;;;;;;;;;;;;;;;;;;;;; G O
;;;
Repeat
DisplaySprite(1,0,0)
DisplayTransparentSprite(0, 0, 0)
For u=1 To cmb_de_bestioles
laz.b=0
For i=1 To 3
flag.b=0
For o=-5 To 5
If p(lax(u)+o,lay(u)+1)=0
flag+1
EndIf
Next
If flag=11
lay(u)+1
Else
laz=1:Goto la1
EndIf
Next
;;;
la1:
If laz=1 ; si on est sur du sol
flag2.b=0
escalier.b=0
For o=0 To 10
If p(lax(u)+5*sens(u),lay(u)-o)=0
flag2+1
Else
escalier=o
EndIf
Next
If flag2=11 ; si on peux avancer
lax(u)+sens(u)
Else
If escalier<=1
lax(u)+sens(u)
lay(u)-escalier
Else
sens(u)*-1
EndIf
EndIf
EndIf
If u<6
DisplayTransparentSprite(2, lax(u)-5,lay(u)-10)
Else
DisplayTransparentSprite(3, lax(u)-5,lay(u)-10)
EndIf
Next u
FlipBuffers()
;Delay(1)
ExamineKeyboard()
Until KeyboardPushed(#PB_Key_Escape)