Souris en dehors des limites d'un jeu

Programmation avancée de jeux en PureBasic
Avatar de l’utilisateur
falsam
Messages : 7244
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Souris en dehors des limites d'un jeu

Message par falsam »

L'utilisation de OpenWindowedScreenFocus associé à ExamineMouse() empêche d'utiliser la souris en dehors de la fenêtre. Il en résulte qu'il est pas facile de déplacer la fenêtre de l'application ou bien de lancer une application tout en gardant le jeu actif.

Le code qui suit examine la position de la souris et capture ou libère la souris pour rendre son usage possible dans le système d'exploitation. ReleaseMouse().

Vous aurez besoin de cette image.
Image

Code : Tout sélectionner

Enumeration
  #MainForm
EndEnumeration

Enumeration Sprite
  #Mouse2D
EndEnumeration

Procedure OpenWindowedScreenFocus(Window)
  Protected Focus.b, WMouseX, WMouseY
  
  WMouseX = WindowMouseX(Window)
  WMouseY = WindowMouseY(Window)
       
  MouseLocate(WMouseX, WMouseY)
  If WMouseX > 0 And WMouseX < WindowWidth(Window, #PB_Window_InnerCoordinate)-1 And 
     WMouseY > 0 And WmouseY < WindowHeight(Window, #PB_Window_InnerCoordinate)-1
    ReleaseMouse(#False)      
    Focus = #True
  Else
    Focus = #False
    ReleaseMouse(#True)        
  EndIf
    
  ProcedureReturn Focus
EndProcedure


Procedure GamePreload()
  UsePNGImageDecoder()
  LoadSprite(#Mouse2D, "mousepointerred.png")
EndProcedure

Procedure GameUpdate()
  If OpenWindowedScreenFocus(#Mainform)
    DisplayTransparentSprite(#Mouse2D, MouseX(), MouseY())
  EndIf
EndProcedure    

Procedure GameStart()
  Protected cr.b = #True
  Protected Width = 800
  Protected Height = 600
  
  If InitSprite() = 0 Or InitKeyboard() = 0 Or InitMouse() = 0 And InitSound() = 0
    MessageRequester("Error", "Sprite system can't be initialized", 0)
    End
  EndIf
 
  If OpenWindow(#mainform, 0, 0, Width, Height, "New Game", #PB_Window_SystemMenu|#PB_Window_ScreenCentered)
    If OpenWindowedScreen(WindowID(#mainform), 0, 0, Width, Height)
      GamePreload()
    EndIf
  EndIf

  ;-Boucle evenementielle
  Repeat  
    Repeat
      Event = WindowEvent()
     
      Select event    
        Case #PB_Event_CloseWindow
          End
      EndSelect  
    Until event=0
    
    FlipBuffers()
    ClearScreen(RGB(0,0,0))
                
    ExamineKeyboard()
    ExamineMouse()
    GameUpdate()
  
  Until KeyboardPushed(#PB_Key_Escape)
EndProcedure

Procedure GameEnd()
  
EndProcedure

GameStart()
Configuration : Windows 11 Famille 64-bit - PB 6.03 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Avatar de l’utilisateur
TazNormand
Messages : 1294
Inscription : ven. 27/oct./2006 12:19
Localisation : Calvados (14)

Re: Souris en dehors des limites d'un jeu

Message par TazNormand »

Salut Falsam

sympa ton code, merci :D

en rapport avec ce topic (Problème d'utilisation de la souris), je suppose :wink:
Image
Image
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: Souris en dehors des limites d'un jeu

Message par Backup »

d'ailleurs mon dernier code, du topic (Problème d'utilisation de la souris),
permet deja de modifier la position de la fenetre , ainsi que sa taille ...
mais bon ....
un exemple de plus, c'est un exemple de plus .
Avatar de l’utilisateur
falsam
Messages : 7244
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Souris en dehors des limites d'un jeu

Message par falsam »

TazNormand a écrit :en rapport avec ce topic (Problème d'utilisation de la souris), je suppose :wink:
Effectivement, c'est en rapport avec ce topic. Je l'ai extrait du code que j'avais proposé sur ce même topic juste aprés ta question (et avant la réponse de Dobro :mrgreen:).
:arrow: http://www.purebasic.fr/french/viewtopi ... 47#p162847
Je l'ai ensuite amélioré pour stocker l'essentiel dans la procédure OpenWindowedScreenFocus(Window).
Dobro a écrit :un exemple de plus, c'est un exemple de plus .
Oui mais dont l'essentiel est dans une procédure qui retourne la valeur #True (Le curseur de la souris a le focus sur l'OpenWindowedScreenou) #False (Le curseur de la souris n'as PLUS le focus sur l'OpenWindowedScreenou.

Actuellement, cette procédure force la capture ou la libération de la souris.

je pourrais améliorer cette procédure en ajoutant un flag qui permet d'indiquer à la procédure si il faut capturer ou libèrer la souris pour rendre son usage possible dans le système d'exploitation.
Configuration : Windows 11 Famille 64-bit - PB 6.03 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: Souris en dehors des limites d'un jeu

Message par Backup »

falsam a écrit :Effectivement, c'est en rapport avec ce topic. Je l'ai extrait du code que j'avais proposé sur ce même topic juste aprés ta question (et avant la réponse de Dobro :mrgreen:)..

pas vraiment :mrgreen: :mrgreen:
j'avais deja posté ce code ici
http://www.purebasic.fr/french/viewtopi ... en#p153153
le 15/05/2013 a 18:03 :mrgreen: :mrgreen: :lol:
G-Rom
Messages : 3627
Inscription : dim. 10/janv./2010 5:29

Re: Souris en dehors des limites d'un jeu

Message par G-Rom »

Dobro a écrit :
falsam a écrit :Effectivement, c'est en rapport avec ce topic. Je l'ai extrait du code que j'avais proposé sur ce même topic juste aprés ta question (et avant la réponse de Dobro :mrgreen:)..

pas vraiment :mrgreen: :mrgreen:
j'avais deja posté ce code ici
http://www.purebasic.fr/french/viewtopi ... en#p153153
le 15/05/2013 a 18:03 :mrgreen: :mrgreen: :lol:
D'ailleurs , ce code est faux , pas faux dans le sens propre du terme , mais dans son explication :
Dobro a écrit :il devrai meme etre multiplateforme ... :)

j'ai mis en commentaire les lignes
";showcursor_(0) ; /// ;showcursor_(1) ; " qui font appel a l'api windows pour cacher/montrer le curseur de souris windows ( la fleche )
il doit y avoir équivalant sur les autres OS :)
Pas de bol, SetWindowCallback() marche que sous windows ;)
Pour le multiplateforme , tu repasseras :mrgreen:
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: Souris en dehors des limites d'un jeu

Message par Backup »

fallait bien que tu ramènes ta Fraise toi

Image
Avatar de l’utilisateur
falsam
Messages : 7244
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Souris en dehors des limites d'un jeu

Message par falsam »

Vous deux vous me rappelez les deux vieux du MuppetShow

Image

Au fait .... il n 'a pas eu raison de la ramener ? :mrgreen:
Configuration : Windows 11 Famille 64-bit - PB 6.03 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: Souris en dehors des limites d'un jeu

Message par Backup »

pfff !

Image
Avatar de l’utilisateur
graph100
Messages : 1318
Inscription : sam. 21/mai/2005 17:50

Re: Souris en dehors des limites d'un jeu

Message par graph100 »

Ahaha ! Vous êtes vraiment drôle !

Merci pour les exemples, c'est cool pour ceux qui débutent ! Falsam, il va falloir que tu te fasses une galerie pour classer tout ça proprement :lol:
_________________________________________________
Mon site : CeriseCode (Attention Chantier perpétuel ;))
Répondre