Une souris toujours visible à l'écran.

Partagez votre expérience de PureBasic avec les autres utilisateurs.
Avatar de l’utilisateur
plabouro472
Messages : 40
Inscription : sam. 23/juil./2022 10:17

Une souris toujours visible à l'écran.

Message par plabouro472 »

Sur un écran, la souris disparait lorsqu' elle atteint la partie en bas à droite.
Dans cette démo, elle s'oriente automatiquement en fonction du coin vers lequel elle se dirige.


Touche Echappe Quitter.
Touches Pad 0 -> 3 Change le Pointeur.
Touche + Pointeur + 1.
Touches fléchées Déplace.
Souris Déplace.

Note : à partir de la version 6.21 de PB, CreateSprite a besoin d'un paramètres pour pouvoir utiliser le mode transparent avec la commande DisplayTransparentSprite
MouseSpr = CreateSprite( #PB_Any , Souris_Large * 2 , Souris_Haut * 2 , #PB_Sprite_AlphaBlending )


Code de la démo :

Code : Tout sélectionner

 

Global WinMaxX			.u	= 320
Global WinMaxY			.u	= 200

Global MaxMouse			.u	= 4
Global PlayerDep		.u	= 2

Global playerX			.u	= 0
Global playerY			.u	= 0
		
Global MouseSpr			.i
Global MouseTyp			.a

Global Souris_Large	.u
Global Souris_Haut	.u
Global Souris_xMax	.u
Global Souris_yMax	.u
Global ZoneX				.a
Global ZoneY				.a
Global OffsetX			.b
Global OffsetY			.b

; Palette de couleur
Global Dim Pen.l( 5 )
Pen( 0 )		= RGB( 000 ,	000 ,	000	)
Pen( 1 )		= RGB( 024 ,	024 ,	024	)
Pen( 2 )		= RGB( 064 ,	064 ,	064	)
Pen( 3 )		= RGB( 180 ,	180 ,	180	)
Pen( 4 )		= RGB( 255 ,	255 ,	255	)

If Not( InitSprite() And InitKeyboard() And InitMouse()	)
	MessageRequester("Erreur", "Environnement sprite non initialisé.", 0	)
	End
EndIf


; Change l'image du pointeur selon le type choisi
Procedure Init_Mouse	( )
	Select MouseTyp
		Case 0	: Restore DonneesMouse
		Case 1	: Restore DonneesMainH
		Case 2	: Restore DonneesMainV
		Case 3	: Restore DonneesMain45
	EndSelect
	
	Read.a Souris_Large
	Read.a Souris_Haut
	Souris_xMax	= Souris_Large * 2		- 1
	Souris_yMax	= Souris_Haut  * 2		- 1
	
	; Le Sprite a peut-être changé de taille, on supprime l'ancien pour en créer un nouveau
	If MouseSpr	: FreeSprite( MouseSpr	)	: EndIf
	; à partir de la version 6.21 de PB, CreateSprite a besoin d'un paramètres
	; pour pouvoir utiliser le mode transparent avec la commande DisplayTransparentSprite
	
	CompilerIf #PB_Compiler_Version	> 620
		MouseSpr		= CreateSprite( #PB_Any	, Souris_Large * 2	, Souris_Haut * 2	, #PB_Sprite_AlphaBlending	)
	CompilerElse
		MouseSpr		= CreateSprite( #PB_Any	, Souris_Large * 2	, Souris_Haut * 2	)
	CompilerEndIf
	
	
	; redessine le nouveau pointeur
	StartDrawing( SpriteOutput( MouseSpr	)	)
	For y.a = 0 To Souris_Haut - 1
		For x.a = 0 To Souris_Large - 1
			Read.a couleur
			Plot( x								, y								, Pen( couleur ) )	; Haut	Gauche
			Plot( Souris_xMax - x	, y								, Pen( couleur ) )	; Haut	Droite
			Plot( Souris_xMax - x	, Souris_yMax - y	, Pen( couleur ) )	; Bas		Droite
			Plot( x								, Souris_yMax - y	, Pen( couleur ) )	; Bas		Gauche
		Next
	Next
	StopDrawing()

EndProcedure


If OpenWindow( 0	, 0	, 0	, WinMaxX	, WinMaxY	, "Pointeur toujours visible!"	, #PB_Window_SystemMenu | #PB_Window_ScreenCentered	)
	
	If OpenWindowedScreen( WindowID(0)	, DesktopScaledX(0)	, DesktopScaledX(0)	, DesktopScaledX(WinMaxX)	, DesktopScaledX(WinMaxY)	, #False	, 0	, 0	)
		; Initialise le pointeur avec l'image N°3
		MouseTyp			= 3
		Init_Mouse	( )
		
		Repeat
			; Efface l'écran puis restaure l'affichage
			ClearScreen		( #White )
			StartDrawing	( ScreenOutput( )	)
			LTxt.a	= 50
			FrontColor		( #Black	)
			BackColor			( #White	)
			DrawText			( 80	, LTxt	, "Echappe _______Quitter." 					)	: LTxt + 20
			DrawText			( 80	, LTxt	, "Pad 0 -> 3 ______Pointeur."			)	: LTxt + 20
			DrawText			( 80	, LTxt	, "Touche + _______Pointeur + 1."					)	: LTxt + 20
			DrawText			( 80	, LTxt	, "Touche fléchées _Déplace."	)	: LTxt + 20
			StopDrawing		( )
			
			
			
			
			ExamineKeyboard			()
			; Change l'image du pointeur à l'aide des touche du clavier
			If KeyboardReleased	( #PB_Key_Pad0		)	: MouseTyp	= 0	:													Init_Mouse	( )					: EndIf
			If KeyboardReleased	( #PB_Key_Pad1		)	: MouseTyp	= 1	:													Init_Mouse	( )					: EndIf
			If KeyboardReleased	( #PB_Key_Pad2		)	: MouseTyp	= 2	:													Init_Mouse	( )					: EndIf
			If KeyboardReleased	( #PB_Key_Pad3		)	: MouseTyp	= 3	:													Init_Mouse	( )					: EndIf
			If KeyboardReleased	( #PB_Key_Add			)	: MouseTyp	= (MouseTyp + 1) % MaxMouse	:	Init_Mouse	( )					: EndIf
			
			
			
			
			; Déplacement du pointeur à l'aide des touches fléchées du clavier
			If KeyboardPushed		( #PB_Key_Up		)	And playerY - PlayerDep >= 0   						: playerY - PlayerDep			: EndIf
			If KeyboardPushed		( #PB_Key_Down	)	And playerY + PlayerDep < ScreenHeight()	: playerY + PlayerDep			: EndIf
			If KeyboardPushed		( #PB_Key_Left	)	And playerX - PlayerDep >= 0							: playerX - PlayerDep			: EndIf
			If KeyboardPushed		( #PB_Key_Right	)	And playerX + PlayerDep < ScreenWidth()		: playerX + PlayerDep			: EndIf
			; Trouve le quart dans lequel on se situe
			If playerX < 	ScreenWidth		()/2 : ZoneX	= 0	: OffsetX	= 0											: 												: EndIf
			If playerX >=	ScreenWidth		()/2 : ZoneX	= 1	: OffsetX	= -Souris_Large					: 												: EndIf
			If playerY < 	ScreenHeight	()/2 : ZoneY	= 0	: 																: OffsetY	= 0							: EndIf
			If playerY >=	ScreenHeight	()/2 : ZoneY	= 1	: 																: OffsetY	= -Souris_Haut	: EndIf
			; Récupère l'image correspondant au quart trouvé pour les mouvements au clavier et affiche celui-ci sur l'écran
			ClipSprite								( MouseSpr	, ZoneX * Souris_Large	, ZoneY * Souris_Haut , Souris_Large , Souris_Haut	)
			TransparentSpriteColor		( MouseSpr	, #Black	)
			DisplayTransparentSprite	( MouseSpr	, playerX + OffsetX			, playerY + OffsetY	)
			
			
			
			
			; Déplacement du pointeur à l'aide de la souris
			ExamineMouse()
			MouseX		= MouseX()
			MouseY		= MouseY()
			; Trouve le quart dans lequel on se situe
			If MouseX < 	ScreenWidth		()/2 : ZoneX	= 0	: OffsetX	= 0							: 												: EndIf
			If MouseX >=	ScreenWidth		()/2 : ZoneX	= 1	: OffsetX	= -Souris_Large	: 												: EndIf
			If MouseY < 	ScreenHeight	()/2 : ZoneY	= 0	: 												: OffsetY	= 0							: EndIf
			If MouseY >=	ScreenHeight	()/2 : ZoneY	= 1	: 												: OffsetY	= -Souris_Haut	: EndIf
			; Récupère l'image correspondant au quart trouvé pour les mouvements à la souris et affiche celui-ci sur l'écran
			ClipSprite								( MouseSpr	, ZoneX * Souris_Large	, ZoneY * Souris_Haut , Souris_Large , Souris_Haut	)
			TransparentSpriteColor		( MouseSpr	, #Black	)
			DisplayTransparentSprite	( MouseSpr	, MouseX + OffsetX			, MouseY + OffsetY	)
			
			
			
			
			FlipBuffers()
			
			
			
			
			Repeat
				Event		= WindowEvent()
				Select Event
					Case #PB_Event_CloseWindow
						Quit = 1
				EndSelect
				
			Until Event = 0
			
		Until  Quit Or KeyboardPushed( #PB_Key_Escape )
		
	Else
		MessageRequester(	"Erreur", "OpenWindowedScreen non initialisé."	, 0	)
	EndIf
	
EndIf

DataSection
	DonneesMouse:
	Data.a	12,19
	Data.a	1,3,0,0,0,0,0,0,0,0,0,0
	Data.a	1,2,3,0,0,0,0,0,0,0,0,0
	Data.a	1,4,2,3,0,0,0,0,0,0,0,0
	Data.a	1,4,4,2,3,0,0,0,0,0,0,0
	Data.a	1,4,4,4,2,3,0,0,0,0,0,0
	Data.a	1,4,4,4,4,2,3,0,0,0,0,0
	Data.a	1,4,4,4,4,4,2,3,0,0,0,0
	Data.a	1,4,4,4,4,4,4,2,3,0,0,0
	Data.a	1,4,4,4,4,4,4,4,2,3,0,0
	Data.a	1,4,4,4,4,4,4,4,4,2,3,0
	Data.a	1,4,4,4,4,4,4,4,4,4,2,3
	Data.a	1,4,4,4,4,4,4,4,4,4,4,2
	Data.a	1,4,4,4,4,4,4,2,2,2,2,2
	Data.a	1,4,4,4,1,3,4,2,0,0,0,0
	Data.a	1,4,4,1,3,1,4,4,2,0,0,0
	Data.a	1,4,1,3,0,1,3,4,2,0,0,0
	Data.a	1,1,3,0,0,0,1,4,4,2,0,0
	Data.a	0,0,0,0,0,0,1,3,4,2,0,0
	Data.a	0,0,0,0,0,0,0,2,2,0,0,0
	
	DonneesMainH:
	Data.a	24,19
	Data.a	0,0,0,0,0,0,0,0,0,0,3,3,3,0,0,0,0,0,0,0,0,0,0,0
	Data.a	0,0,0,0,0,0,0,0,0,3,1,1,1,3,0,0,0,0,0,0,0,0,0,0
	Data.a	0,0,0,0,0,0,0,0,0,3,1,4,4,1,3,3,0,0,0,0,0,0,0,0
	Data.a	0,0,0,0,0,0,0,0,0,3,1,4,4,4,1,1,3,3,0,0,0,0,0,0
	Data.a	0,0,3,3,3,3,3,3,3,3,3,1,4,4,4,4,1,1,3,3,0,0,0,0
	Data.a	0,3,1,1,1,1,1,1,1,1,1,1,1,1,1,4,4,4,1,1,3,3,0,0
	Data.a	3,1,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,1,1,1,3
	Data.a	3,1,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,1,3
	Data.a	0,3,1,1,1,1,1,1,1,1,1,4,4,4,4,4,4,4,4,4,4,4,1,3
	Data.a	0,0,3,3,3,3,1,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,1,3
	Data.a	0,0,0,0,0,3,1,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,1,3
	Data.a	0,0,0,0,0,0,3,1,1,1,1,4,4,4,4,4,4,4,4,4,4,4,1,3
	Data.a	0,0,0,0,0,0,3,1,4,4,4,4,4,4,4,4,4,4,4,4,4,4,1,3
	Data.a	0,0,0,0,0,0,3,1,4,4,4,4,4,4,4,4,4,4,4,4,4,4,1,3
	Data.a	0,0,0,0,0,0,0,3,1,1,1,1,4,4,4,4,4,4,4,4,4,4,1,3
	Data.a	0,0,0,0,0,0,0,3,1,4,4,4,4,4,4,4,4,4,4,4,1,1,1,3
	Data.a	0,0,0,0,0,0,0,0,3,1,4,4,4,4,4,4,4,1,1,1,3,3,3,0
	Data.a	0,0,0,0,0,0,0,0,0,3,1,1,1,1,1,1,1,3,3,3,0,0,0,0
	Data.a	0,0,0,0,0,0,0,0,0,0,3,3,3,3,3,3,3,0,0,0,0,0,0,0
	
	DonneesMainV:
	Data.a	19,24
	Data.a	0,0,0,0,0,0,3,3,0,0,0,0,0,0,0,0,0,0,0
	Data.a	0,0,0,0,0,3,1,1,3,0,0,0,0,0,0,0,0,0,0
	Data.a	0,0,0,0,3,1,4,4,1,3,0,0,0,0,0,0,0,0,0
	Data.a	0,0,0,0,3,1,4,4,1,3,0,0,0,0,0,0,0,0,0
	Data.a	0,0,0,0,3,1,4,4,1,3,0,0,0,0,0,0,0,0,0
	Data.a	0,0,0,0,3,1,4,4,1,3,3,0,0,0,0,0,0,0,0
	Data.a	0,0,0,0,3,1,4,4,1,1,1,3,3,3,0,0,0,0,0
	Data.a	0,0,0,0,3,1,4,4,1,4,4,1,1,1,3,3,0,0,0
	Data.a	0,0,0,0,3,1,4,4,1,4,4,1,4,4,1,1,3,0,0
	Data.a	0,3,3,3,3,1,4,4,1,4,4,1,4,4,1,4,1,3,0
	Data.a	3,1,1,1,3,1,4,4,1,4,4,1,4,4,1,4,4,1,3
	Data.a	3,1,4,4,1,1,4,4,4,4,4,4,4,4,1,4,4,1,3
	Data.a	3,1,4,4,4,1,4,4,4,4,4,4,4,4,4,4,4,1,3
	Data.a	0,3,1,4,4,1,4,4,4,4,4,4,4,4,4,4,4,1,3
	Data.a	0,0,3,1,4,1,4,4,4,4,4,4,4,4,4,4,4,1,3
	Data.a	0,0,3,1,4,4,4,4,4,4,4,4,4,4,4,4,4,1,3
	Data.a	0,0,0,3,1,4,4,4,4,4,4,4,4,4,4,4,4,1,3
	Data.a	0,0,0,3,1,4,4,4,4,4,4,4,4,4,4,4,1,3,0
	Data.a	0,0,0,0,3,1,4,4,4,4,4,4,4,4,4,4,1,3,0
	Data.a	0,0,0,0,3,1,4,4,4,4,4,4,4,4,4,4,1,3,0
	Data.a	0,0,0,0,0,3,1,4,4,4,4,4,4,4,4,1,3,0,0
	Data.a	0,0,0,0,0,3,1,4,4,4,4,4,4,4,4,1,3,0,0
	Data.a	0,0,0,0,0,3,1,1,1,1,1,1,1,1,1,1,3,0,0
	Data.a	0,0,0,0,0,0,3,3,3,3,3,3,3,3,3,3,0,0,0
	
	DonneesMain45:
	Data.a	19,23
	Data.a	0,0,3,3,3,3,0,0,0,0,0,0,0,0,0,0,0,0,0
	Data.a	0,3,1,1,1,1,3,0,0,0,0,0,0,0,0,0,0,0,0
	Data.a	0,3,1,4,4,1,1,3,0,0,0,0,0,0,0,0,0,0,0
	Data.a	0,3,1,4,4,4,1,1,3,0,0,0,3,3,0,0,0,0,0
	Data.a	0,0,3,1,4,4,4,1,1,3,0,3,1,1,3,0,0,0,0
	Data.a	0,0,0,3,1,4,4,4,1,1,3,1,4,4,1,3,0,0,0
	Data.a	0,0,0,3,1,1,4,4,4,1,1,4,4,4,1,3,0,0,0
	Data.a	0,0,0,3,1,4,1,4,4,4,1,4,4,4,1,3,0,0,0
	Data.a	0,0,3,1,4,4,4,1,4,4,4,1,4,4,1,3,0,0,0
	Data.a	0,0,3,1,1,4,4,4,4,4,4,4,4,4,1,3,0,0,0
	Data.a	0,3,1,4,4,1,4,4,4,4,4,4,4,4,4,1,3,0,0
	Data.a	0,3,1,4,4,4,4,4,4,4,4,4,4,4,4,1,3,0,0
	Data.a	3,1,1,1,4,4,4,4,4,4,4,4,4,4,4,1,1,3,0
	Data.a	3,1,4,1,1,4,4,4,4,4,4,4,4,4,4,4,1,3,0
	Data.a	3,1,4,4,1,4,4,4,4,4,4,4,4,4,4,4,1,3,0
	Data.a	3,1,1,4,4,4,4,4,4,4,4,4,4,4,4,4,4,1,3
	Data.a	0,3,1,1,4,4,4,4,4,4,4,4,4,4,4,4,4,1,3
	Data.a	0,0,3,1,1,4,4,4,4,4,4,4,4,4,4,4,1,3,0
	Data.a	0,0,0,3,1,1,4,4,4,4,4,4,4,4,4,1,3,0,0
	Data.a	0,0,0,0,3,1,1,1,4,4,4,4,4,4,1,3,0,0,0
	Data.a	0,0,0,0,0,3,3,3,1,4,4,4,4,1,3,0,0,0,0
	Data.a	0,0,0,0,0,0,0,0,3,1,1,1,1,3,0,0,0,0,0
	Data.a	0,0,0,0,0,0,0,0,0,3,3,3,3,0,0,0,0,0,0

EndDataSection