Page 1 sur 1

Souris en dehors des limites d'un jeu

Publié : lun. 05/mai/2014 23:52
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()

Re: Souris en dehors des limites d'un jeu

Publié : mar. 06/mai/2014 10:04
par TazNormand
Salut Falsam

sympa ton code, merci :D

en rapport avec ce topic (Problème d'utilisation de la souris), je suppose :wink:

Re: Souris en dehors des limites d'un jeu

Publié : mar. 06/mai/2014 11:33
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 .

Re: Souris en dehors des limites d'un jeu

Publié : mer. 07/mai/2014 14:12
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.

Re: Souris en dehors des limites d'un jeu

Publié : mer. 07/mai/2014 16:29
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:

Re: Souris en dehors des limites d'un jeu

Publié : jeu. 08/mai/2014 8:40
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:

Re: Souris en dehors des limites d'un jeu

Publié : jeu. 08/mai/2014 12:51
par Backup
fallait bien que tu ramènes ta Fraise toi

Image

Re: Souris en dehors des limites d'un jeu

Publié : jeu. 08/mai/2014 13:19
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:

Re: Souris en dehors des limites d'un jeu

Publié : jeu. 08/mai/2014 15:02
par Backup
pfff !

Image

Re: Souris en dehors des limites d'un jeu

Publié : sam. 10/mai/2014 0:41
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: