SpriteBlendingMode()

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Mesa
Messages : 1126
Inscription : mer. 14/sept./2011 16:59

SpriteBlendingMode()

Message par Mesa »

J’essaie d'afficher toutes les possibilités de transparences des sprites mais ce code ne semble pas fonctionner.

Une idée ?

Code : Tout sélectionner

Structure ModeTransparence
  Nom$
  Numero.l
EndStructure

NewList ModeSource.ModeTransparence()
AddElement(ModeSource())   
ModeSource()\Nom$ = "#PB_Sprite_BlendZero"
ModeSource()\Numero =#PB_Sprite_BlendZero
AddElement(ModeSource())   
ModeSource()\Nom$ = "#PB_Sprite_BlendOne"
ModeSource()\Numero =#PB_Sprite_BlendOne
AddElement(ModeSource())   
ModeSource()\Nom$ = "#PB_Sprite_BlendSourceColor"
ModeSource()\Numero =#PB_Sprite_BlendSourceColor
AddElement(ModeSource())   
ModeSource()\Nom$ = "#PB_Sprite_BlendInvertSourceColor"
ModeSource()\Numero =#PB_Sprite_BlendInvertSourceColor
AddElement(ModeSource())   
ModeSource()\Nom$ = "#PB_Sprite_BlendDestinationColor"
ModeSource()\Numero =#PB_Sprite_BlendDestinationColor
AddElement(ModeSource())   
ModeSource()\Nom$ = "#PB_Sprite_BlendInvertDestinationColor"
ModeSource()\Numero =#PB_Sprite_BlendInvertDestinationColor
AddElement(ModeSource())   
ModeSource()\Nom$ = "#PB_Sprite_BlendSourceAlpha"
ModeSource()\Numero =#PB_Sprite_BlendSourceAlpha
AddElement(ModeSource())   
ModeSource()\Nom$ = "#PB_Sprite_BlendInvertSourceAlpha"
ModeSource()\Numero =#PB_Sprite_BlendInvertSourceAlpha
AddElement(ModeSource())   
ModeSource()\Nom$ = "#PB_Sprite_BlendDestinationAlpha"
ModeSource()\Numero =#PB_Sprite_BlendDestinationAlpha
AddElement(ModeSource())   
ModeSource()\Nom$ = "PB_Sprite_BlendInvertDestinationAlpha"
ModeSource()\Numero =#PB_Sprite_BlendInvertDestinationAlpha

NewList ModeDestination.ModeTransparence()
CopyList(ModeSource(), ModeDestination())

InitSprite()
InitKeyboard()


OpenScreen(800,600,32,"Sprite")

;Sprite Cible 32-bits car l'écran est 32-bits.
CreateSprite(0,100,100,#PB_Sprite_AlphaBlending)
StartDrawing(SpriteOutput(0))
;DrawingMode(#PB_2DDrawing_AlphaBlend)
;DrawingMode(#PB_2DDrawing_AllChannels)
Circle(50,50,49,RGBA(255,255,0,255))
Circle(50,50,40,RGBA(0,255,0,128))
Circle(50,50,30,RGBA(0,255,255,128))
Circle(50,50,20,RGBA(0,0,255,128))
Circle(50,50,10,RGBA(255,0,0,64))
StopDrawing()

ForEach ModeSource()
  ForEach ModeDestination()
    ; ok$=ModeSource()\Nom$+"/"+ModeDestination()\Nom$
    ; Debug ok$
        
    ClearScreen(RGBA(255,255,255,255))
    
    ExamineKeyboard()
    If KeyboardPushed(#PB_Key_Escape)
      End
    EndIf


    StartDrawing(ScreenOutput())
    DrawText(0, 0, "Appuyer LONGTEMPS sur Echap pour quitter")
    DrawText(100, 100, ModeSource()\Nom$+" / "+ModeDestination()\Nom$)
    StopDrawing() 
    
    ;TRANSPARENCE
    SpriteBlendingMode(ModeSource()\Numero, ModeDestination()\Numero)
    
    ExamineKeyboard()
    If KeyboardPushed(#PB_Key_Escape)
      End
    EndIf
    
    TransparentSpriteColor(0, RGBA(0,0,0,128))
    DisplaySprite(0, 50, 160)
    DisplayTransparentSprite(0, 200, 160,128)
    DisplayTransparentSprite(0, 350, 160,128,RGBA(255,0,0,128))
    DisplayTransparentSprite(0, 500, 160,0,RGBA(255,0,0,128))
    DisplayTransparentSprite(0, 500, 160,255,RGBA(255,0,0,128))
    
    ExamineKeyboard()
    If KeyboardPushed(#PB_Key_Escape)
      End
    EndIf
    
    TransparentSpriteColor(0, RGBA(255,0,0,128))
    DisplaySprite(0, 50, 360)
    DisplayTransparentSprite(0, 200, 360,128)
    DisplayTransparentSprite(0, 350, 360,128)
    DisplayTransparentSprite(0, 500, 360,0)
    DisplayTransparentSprite(0, 500, 360,255)
    FlipBuffers()
    ClearScreen(RGBA(255,255,255,255))
    
    ExamineKeyboard()
    If KeyboardPushed(#PB_Key_Escape)
      End
    EndIf
    
    Delay(3000) 
    ;FlipBuffers()
    ;ClearScreen(RGBA(255,255,255,255))
    ;FlipBuffers()
    ;SpriteBlendingMode(ModeSource()\Numero, ModeDestination()\Numero)
  Next
Next
M.
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: SpriteBlendingMode()

Message par Backup »

il semble qu'il faille repeter la fonction :

Code : Tout sélectionner

Structure ModeTransparence
	Nom$
	Numero.l
EndStructure

NewList ModeSource.ModeTransparence()
AddElement(ModeSource())   
ModeSource()\Nom$ = "#PB_Sprite_BlendZero"
ModeSource()\Numero =#PB_Sprite_BlendZero
AddElement(ModeSource())   
ModeSource()\Nom$ = "#PB_Sprite_BlendOne"
ModeSource()\Numero =#PB_Sprite_BlendOne
AddElement(ModeSource())   
ModeSource()\Nom$ = "#PB_Sprite_BlendSourceColor"
ModeSource()\Numero =#PB_Sprite_BlendSourceColor
AddElement(ModeSource())   
ModeSource()\Nom$ = "#PB_Sprite_BlendInvertSourceColor"
ModeSource()\Numero =#PB_Sprite_BlendInvertSourceColor
AddElement(ModeSource())   
ModeSource()\Nom$ = "#PB_Sprite_BlendDestinationColor"
ModeSource()\Numero =#PB_Sprite_BlendDestinationColor
AddElement(ModeSource())   
ModeSource()\Nom$ = "#PB_Sprite_BlendInvertDestinationColor"
ModeSource()\Numero =#PB_Sprite_BlendInvertDestinationColor
AddElement(ModeSource())   
ModeSource()\Nom$ = "#PB_Sprite_BlendSourceAlpha"
ModeSource()\Numero =#PB_Sprite_BlendSourceAlpha
AddElement(ModeSource())   
ModeSource()\Nom$ = "#PB_Sprite_BlendInvertSourceAlpha"
ModeSource()\Numero =#PB_Sprite_BlendInvertSourceAlpha
AddElement(ModeSource())   
ModeSource()\Nom$ = "#PB_Sprite_BlendDestinationAlpha"
ModeSource()\Numero =#PB_Sprite_BlendDestinationAlpha
AddElement(ModeSource())   
ModeSource()\Nom$ = "PB_Sprite_BlendInvertDestinationAlpha"
ModeSource()\Numero =#PB_Sprite_BlendInvertDestinationAlpha

NewList ModeDestination.ModeTransparence()
CopyList(ModeSource(), ModeDestination())

InitSprite()
InitKeyboard()

CreateImage(1,800,600,32)
StartDrawing(ImageOutput(1))
	for i=1 to 3000
		Box( random(800-5,1),random(600-5,1),5,5,rgb(random(255),random(255),random(255)))
	next i
StopDrawing()



OpenScreen(800,600,32,"Sprite")

;Sprite Cible 32-bits car l'écran est 32-bits.
CreateSprite(0,100,100,#PB_Sprite_AlphaBlending)
StartDrawing(SpriteOutput(0))
	;DrawingMode(#PB_2DDrawing_AlphaBlend)
	;DrawingMode(#PB_2DDrawing_AllChannels)
	Circle(50,50,49,RGBA(255,255,0,255))
	Circle(50,50,40,RGBA(0,255,0,128))
	Circle(50,50,30,RGBA(0,255,255,128))
	Circle(50,50,20,RGBA(0,0,255,128))
	Circle(50,50,10,RGBA(255,0,0,64))
StopDrawing()

ForEach ModeSource()
	ForEach ModeDestination()
		; ok$=ModeSource()\Nom$+"/"+ModeDestination()\Nom$
		; Debug ok$
		
		; ClearScreen(RGBA(255,255,255,255)) <<<<<<<<<<<<suprime par Dobro
		; ************ deplacé par Dobro **************
		ExamineKeyboard() 
		If KeyboardPushed(#PB_Key_Escape)
			End
		EndIf
		; *******************************************
		
		; ************ suprimé par Dobro ********************
		;  ExamineKeyboard()
		;     If KeyboardPushed(#PB_Key_Escape)
		;       End
		;     EndIf
		; ***************************************************
		
		
		StartDrawing(ScreenOutput())
			DrawImage(ImageId(1),1,1)
			DrawText(0, 0, "Appuyer 3 secondes sur Echap pour quitter")
			DrawText(100, 100, ModeSource()\Nom$+" / "+ModeDestination()\Nom$)
		StopDrawing()
		
		;TRANSPARENCE
		SpriteBlendingMode(ModeSource()\Numero, ModeDestination()\Numero)
		DisplaySprite(0, 50, 160)
		
		SpriteBlendingMode(ModeSource()\Numero, ModeDestination()\Numero)
		TransparentSpriteColor(0, RGBA(0,0,0,128))
		
		SpriteBlendingMode(ModeSource()\Numero, ModeDestination()\Numero)
		DisplayTransparentSprite(0, 200, 160,180)
		
		SpriteBlendingMode(ModeSource()\Numero, ModeDestination()\Numero)
		DisplayTransparentSprite(0, 350, 160,128,RGBA(255,0,0,180))
		
		SpriteBlendingMode(ModeSource()\Numero, ModeDestination()\Numero)
		DisplayTransparentSprite(0, 500, 160,0,RGBA(255,0,0,180))
		
		SpriteBlendingMode(ModeSource()\Numero, ModeDestination()\Numero)
		DisplayTransparentSprite(0, 500, 160,255,RGBA(255,0,0,180))
		
		SpriteBlendingMode(ModeSource()\Numero, ModeDestination()\Numero)
		DisplaySprite(0, 50, 360)
		SpriteBlendingMode(ModeSource()\Numero, ModeDestination()\Numero)
		TransparentSpriteColor(0, RGBA(255,0,0,180))
		
		SpriteBlendingMode(ModeSource()\Numero, ModeDestination()\Numero)
		DisplayTransparentSprite(0, 200, 360,180)
		
		SpriteBlendingMode(ModeSource()\Numero, ModeDestination()\Numero)
		DisplayTransparentSprite(0, 350, 360,180)
		
		SpriteBlendingMode(ModeSource()\Numero, ModeDestination()\Numero)
		DisplayTransparentSprite(0, 500, 360,0)
		
		SpriteBlendingMode(ModeSource()\Numero, ModeDestination()\Numero)
		DisplayTransparentSprite(0, 500, 360,255)
		
		
		; ************ suprimé par Dobro ********************
		; ExamineKeyboard()
		;     If KeyboardPushed(#PB_Key_Escape)
		;       End
		;     EndIf
		
		; ***************************************************
		
		FlipBuffers()
		ClearScreen(RGBA(255,255,255,255))
		
		; ************ suprimé par Dobro ********************
		; ExamineKeyboard()
		;     If KeyboardPushed(#PB_Key_Escape)
		;       End
		;     EndIf
		;    *******************************************
		
		Delay(3000)
		;FlipBuffers()
		;ClearScreen(RGBA(255,255,255,255))
		;FlipBuffers()
		;SpriteBlendingMode(ModeSource()\Numero, ModeDestination()\Numero)
	Next
Next


; 

; Epb

Répondre