no complicated stuff about directX
an old-fashioned code like we do more of it
very simple
probably cross-platform
goodbye transformSprite
since the following versions of Purebasic 5.11
this code Bug , if using a subsystem
or DirectX11
or OpenGL
it depends on the users.....
̷w̷h̷i̷l̷e̷ ̷i̷n̷ ̷P̷B̷ ̷5̷.̷1̷1̷ ̷i̷t̷ ̷w̷o̷r̷k̷s̷
rectification
even in version 5.11 it doesn't work with DirectX11
Code: Select all
;***********************************************
;Titre :*test_transforme_sprite perso
;Auteur : Dobro
;Date :12/10/2019
;Heure :23:50:05
;Version Purebasic : PureBasic 5.70 LTS (Windows - x86)
;Version de l'editeur :EPB PHOENIX V2.68
; Libairies necessaire : Aucune
;***********************************************
InitSprite()
Enumeration
#win
#sprite1
#sprite2
EndEnumeration
; ********* My Super Procedures LOL ****************
Declare Scan_Sprite(Num_sprite)
Declare Flip_H_Sprite(Num_sprite)
Declare Flip_V_Sprite(Num_sprite)
Declare Flip_VH_Sprite(Num_sprite)
; ****************************************************
ExamineDesktops()
EcranX=DesktopWidth(0)/2
EcranY=DesktopHeight(0)/2
If InitSprite() = 0 Or InitKeyboard() = 0 Or InitMouse() = 0
MessageRequester("Erreur", "Impossible d'initialiser l'écran.")
End
EndIf
OpenWindow(#win,1,1,Ecranx,Ecrany,"yoo Flip", #PB_Window_SystemMenu )
OpenWindowedScreen(WindowID(#win),1,1,EcranX,Ecrany,1,0,0)
; *************** pour l'exemple on creer un sprite fait de 2 box de 2 couleurs differentes ******************
;Sprite 1
CreateSprite(#sprite1,100,100)
StartDrawing(SpriteOutput(#Sprite1))
Box(1,1,64,64,RGB(255,255,0))
Box(32,32,64,64,RGB(0,255,150))
StopDrawing()
;*******************************************************************************************************
Scan_Sprite(#sprite1) ; la premiere des procedures, permet de mettre le sprite en Tableau .... pis c'est les tableaux qu'on va manipuler pour fliper notre sprite
CopySprite(#sprite1,#sprite2) ; garde une trace du sprite originale dans #sprite2
; boucle principale
Repeat
Repeat
Event = WindowEvent()
Select Event
Case #PB_Event_CloseWindow
End
EndSelect
Until Event = 0
ClearScreen(0)
ExamineKeyboard()
DisplayTransparentSprite(#sprite2, 10,100) ; le sprite des origines sans modification
Flip_H_Sprite(#sprite1) ; on fait un FLip Horizontale
DisplayTransparentSprite(#sprite1, 10,250) ; on affiche fierement le resultat
Flip_V_Sprite(#sprite1) ; on fait un Flip Vertical
DisplayTransparentSprite(#sprite1, 10,400) ; on affiche fierement le resulat
Flip_VH_Sprite(#sprite1) ; la on est fou , on fait carrement un flip Vertical ET horizontal roulement de tambour ....brbrbrbrbrbrbr tiiiich !
DisplayTransparentSprite(#sprite1, 500,100) ; on affiche le sprite qui ne c'est pas gamélé
; ici on va afficher le text pour les neuneu qu'aurai pas compris ..... ;o)
StartDrawing(ScreenOutput())
DrawText(100,150,"<--- Sprite1 original normal ")
DrawText(100,300,"<--- Sprite2 flipé horizontalement ")
DrawText(100,400,"<--- Sprite2 flipé verticalement ")
DrawText(550,100,"<--- Sprite2 flipé verticalement et horizontalement ")
StopDrawing()
;Affichage à l'écran concretement
FlipBuffers()
ForEver
;- **** Zone Procedure ************
Procedure Scan_Sprite(Num_sprite)
;By Dobro
Protected w
Protected h
w=SpriteWidth(Num_sprite)
h=SpriteHeight(Num_sprite)
Global Dim tab_spr(w,h)
StartDrawing(SpriteOutput(Num_sprite))
For y=0 To h-1
For x=0 To w-1
tab_spr(x,y)=Point(x,y)
Next x
Next y
StopDrawing()
EndProcedure
Procedure Flip_H_Sprite(Num_sprite)
;By Dobro
w=SpriteWidth(Num_sprite)
h=SpriteHeight(Num_sprite)
StartDrawing(SpriteOutput(Num_sprite))
For y=0 To h-1
For x= 0 To w-1
Plot(x,y,tab_spr(x,h-y))
Next x
Next y
StopDrawing()
EndProcedure
Procedure Flip_V_Sprite(Num_sprite)
;By Dobro
w=SpriteWidth(Num_sprite)
h=SpriteHeight(Num_sprite)
StartDrawing(SpriteOutput(Num_sprite))
For y=0 To h-1
For x=0 To w-1
Plot(x,y,tab_spr(w-x,y))
Next x
Next y
StopDrawing()
EndProcedure
Procedure Flip_VH_Sprite(Num_sprite)
;By Dobro
w=SpriteWidth(Num_sprite)
h=SpriteHeight(Num_sprite)
StartDrawing(SpriteOutput(Num_sprite))
For y=0 To h-1
For x=0 To w-1
Plot(x,y,tab_spr(w-x,h-y))
Next x
Next y
StopDrawing()
EndProcedure