Flip Sprite Old school ;o)

Partagez votre expérience de PureBasic avec les autres utilisateurs.
Avatar de l’utilisateur
Zorro
Messages : 2185
Inscription : mar. 31/mai/2016 9:06

Flip Sprite Old school ;o)

Message par Zorro »

pas de bla bla,
pas d'assembleur
probablement Multiplateforme

adieu TransformSprite

voici the FlipSprite Maison sorti du four
sans prise de tete et commenté ... joyeux Noel .... (quoi ??? c'est trop tot ? ) pfff m'en fou :x

Code : Tout sélectionner



;***********************************************
;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
		Event = WaitWindowEvent(2)
		
		Select Event
		EndSelect
		
		
		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'ets 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()
			
Until Event = #PB_Event_CloseWindow







;- **** 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   


Image
Image
Site: http://michel.dobro.free.fr/
Devise :"dis moi ce dont tu as besoin, je t'expliquerai comment t'en passer"
Avatar de l’utilisateur
Zorro
Messages : 2185
Inscription : mar. 31/mai/2016 9:06

Re: Flip Sprite Old school ;o)

Message par Zorro »

dans la code ci dessus, je ne fait que redessiner un sprite a l'aide d'un tableau
quelqu'un sait pourquoi lorsqu'on utilise le sous-system "OPENGL" chez les uns
ou "DIRECTX11" chez les autres, ça n'affiche plus aucun sprite ??

j'ai du reste souvent remarqué que l'utilisation de "sous-system" posait des problemes
avec certains code ....

mais là , le miens est super simple ... donc je ne comprends pas

sans sous system ça marche
si j'utilise OpenGL , il faut ajouter un ClearScreen($0) apres le FilpBuffer()
sinon ça bave .....

si j'utilise "DirectX11" là je n'ai plus de sprites qui s'affichent, seulement les lignes de textes....

et chez un membre du forum anglais, c'est avec OpenGL qu'il a un probleme ....

ça viens de quoi a votre avis ???
Image
Image
Site: http://michel.dobro.free.fr/
Devise :"dis moi ce dont tu as besoin, je t'expliquerai comment t'en passer"
Avatar de l’utilisateur
Zorro
Messages : 2185
Inscription : mar. 31/mai/2016 9:06

Re: Flip Sprite Old school ;o)

Message par Zorro »

pour la petite histoire , mon code Marche tres bien en Purebasic 5.11
quelque soit le sous systeme choisi !!

et c'est seulement la version Purebasic 5.20 qui m'a indiqué que je declarais deux fois "InitSprite()"
les versions depuis 5.20 jusqu' a 5.70 n'indiquent rien ....

j'ai signalé le probleme sur le Forum anglais ... ont verra si il y a suite ....
Image
Image
Site: http://michel.dobro.free.fr/
Devise :"dis moi ce dont tu as besoin, je t'expliquerai comment t'en passer"
Marc56
Messages : 2146
Inscription : sam. 08/févr./2014 15:19

Re: Flip Sprite Old school ;o)

Message par Marc56 »

dxdiag n'indique aucune erreur ?
Est-ce c'est pareil avec dxdiag 12 ?
Avatar de l’utilisateur
Zorro
Messages : 2185
Inscription : mar. 31/mai/2016 9:06

Re: Flip Sprite Old school ;o)

Message par Zorro »

bon en fait en PB5.11 ça ne marche pas non plus

j'utilisais la version 5.11 en realité sans Activer de DirecX ... et effectivement dans ce cas
ça marche ....

mais avec un DirectX choisi, ça ne marche pas (pas de SPrite Affichés )
dxdiag n'indique aucune erreur ?
non ...
Aucun problème n’a été détecté.
ps j'ai en fait Directx 12 sur mon system....

mais toi si tu test mon code en precisant un sous system "OPENGL" ou "DIRECTX11"

tu as quoi comme résultat ??
Image
Image
Site: http://michel.dobro.free.fr/
Devise :"dis moi ce dont tu as besoin, je t'expliquerai comment t'en passer"
Marc56
Messages : 2146
Inscription : sam. 08/févr./2014 15:19

Re: Flip Sprite Old school ;o)

Message par Marc56 »

Je ne sais pas où on précise DirectX ou OpenGL ?
(la dernière fois que j'ai utilisé des sprites c'était sur mon C128 en 1984...) :lol:

En attendant, ton code tel quel sur mon Windows 10 x64 version 1903 en DX12 donne ceci
(image fixe)
Image

:wink:
Avatar de l’utilisateur
Zorro
Messages : 2185
Inscription : mar. 31/mai/2016 9:06

Re: Flip Sprite Old school ;o)

Message par Zorro »

oui en normal ça fonctionne , je sais bien :)

mais si tu precise un sous systeme menu (Compilateur /option du compilateur ) le Champs "Bibliotheque sous systeme"
pour savoir quel nom il faut entrer tu vas dans le Dossier de ton Purebasic il y a un Dossier "SubSystems"
et a l'interieur des dossiers qui porte le nom de "DirectX11 " et "OPENGL"
c'est le nom de ces dossiers qu'il faut indiquer ....

suivant les versions de Purebasic, ceux ci changent ...

voici ce que ça donne chez moi :
http://michel.dobro.free.fr/forum_gamopat/bug.gif

en meme temps, je supose que si on ne precise rien, ça doit prendre le system DirectX present sur l'ordinateur.... (chez moi DX12)
simple supposition hein ...

et lorsque je met rien tout fonctionne ... donc....

le seul truc c'est qu'en OPENGL il faut impérativement ajouter un ClearScreen()
sinon ça blur ... les sprites bavent....
Image
Image
Site: http://michel.dobro.free.fr/
Devise :"dis moi ce dont tu as besoin, je t'expliquerai comment t'en passer"
Marc56
Messages : 2146
Inscription : sam. 08/févr./2014 15:19

Re: Flip Sprite Old school ;o)

Message par Marc56 »

OK.

Avec "DirectX11" j'ai le texte et pas les icônes

Avec "OpenGL" j'ai le texte et les icônes, puis celle-ci glissent lentement vers le bas à gauche en laissant lentement une trainée, donc le blur aussi
C'est joli :P mais ce n'est pas l'effet attendu je pense.
Image
Avatar de l’utilisateur
Zorro
Messages : 2185
Inscription : mar. 31/mai/2016 9:06

Re: Flip Sprite Old school ;o)

Message par Zorro »

voila :) (pas "icones" mais Sprites !! ;) )
Image
Image
Site: http://michel.dobro.free.fr/
Devise :"dis moi ce dont tu as besoin, je t'expliquerai comment t'en passer"
Répondre