Gestion souris avec OpenWindow et OpenWindowedScreen (HELP)

Programmation avancée de jeux en PureBasic
Avatar de l’utilisateur
jak64
Messages : 85
Inscription : dim. 03/mai/2020 23:16

Gestion souris avec OpenWindow et OpenWindowedScreen (HELP)

Message par jak64 »

Bonjour,
Depuis 1 an que j'utilise Purebasic, je n'ai toujours pas compris comment gérer la souris lorsqu'on a un écran "OpenWindowedScreen" inclus dans une fenêtre "OpenWindow". Dans le petit programme que je mets ci-dessous, je n'arrive pas à cliquer sur le X qui est en haut à droite afin de fermer le programme ou sur _ pour minimiser la fenêtre.
Je souhaite redéfinir le curseur souris avec un sprite qui sera utilisé dans la fenêtre "OpenWindowedScreen" mais je souhaite pouvoir cliquer sur le X de la fenêtre "OpenWindow" pour fermer le jeu ou sur _ pour minimiser la fenêtre.

Merci de votre aide précieuse.

Cordialement,
Jacques Joly

Code : Tout sélectionner

;========== Gestion de la souris avec fenêtre "OpenWindow" et fenêtre "OpenWindowedScreen"
;= QUESTION :
;= Comment gérer la souris pour pouvoir cliquer sur le X de la fenêtre Windows afin de fermer la fenêtre ???????????

EnableExplicit
Global event.i
Global x_pave.w, y_pave.w
Global police.w

;=---------- Initialisation des environnements nécessaires
If InitSprite()=0 : MessageRequester("Erreur", "InitSprite() non initialisé !"):End:EndIf
If InitMouse()=0 : MessageRequester("Erreur", "InitMouse() non initialisé !"):End:EndIf

;=---------- Création de la fenêtre Windows
OpenWindow(0, 0, 0, 800,600, "Gestion souris avec fenêtre (OpenWindow) et fenêtre (OpenWindowedScreen) avec sprites", #PB_Window_ScreenCentered | #PB_Window_SystemMenu |  #PB_Window_MinimizeGadget)

;=---------- Création de la fenêtre de jeu
OpenWindowedScreen(WindowID(0),0,0,800,600,1,0,0)

;=---------- Création du sprite cercle
CreateSprite(0,50,50,#PB_Sprite_PixelCollision)
StartDrawing(SpriteOutput(0))
Circle(25, 25, 24, #Yellow)
StopDrawing()

;=---------- Création du sprite pavé
CreateSprite(1,15,15,#PB_Sprite_PixelCollision)
StartDrawing(SpriteOutput(1))
Box(0, 0, 15,15, #White)
StopDrawing()

;=---------- Chargement de la police
police=LoadFont(0, "Calibri", 24)

;=---------- Boucle
  Repeat    
    Repeat
      event = WindowEvent()
      Select event 
        Case #PB_Event_CloseWindow
          End 
      EndSelect
    Until event = 0
    
    ClearScreen(#Blue)
    ExamineMouse()
    x_pave=MouseX()
    y_pave=MouseY()
    DisplayTransparentSprite(0,100,100)
    DisplayTransparentSprite(1,x_pave,y_pave)
    ;=---------- Vérifier si collision entre le curseur (pavé) et le cercle
    If SpriteCollision(0,100,100,1,x_pave,y_pave)
      StartDrawing(ScreenOutput()) 
      DrawingMode(#PB_2DDrawing_Transparent)
      DrawingFont(police)
      DrawText(100,300,"Collision",#Black)
      StopDrawing()
    EndIf
    FlipBuffers()
  ForEver
Avatar de l’utilisateur
venom
Messages : 3071
Inscription : jeu. 29/juil./2004 16:33
Localisation : Klyntar
Contact :

Re: Gestion souris avec OpenWindow et OpenWindowedScreen (HELP)

Message par venom »

Salut,

Je ne sais pas si c'est ça que tu souhaites, mais falsam avait fait ce type de code







@++
Windows 10 x64, PureBasic 5.73 x86 & x64
GPU : radeon HD6370M, CPU : p6200 2.13Ghz
Avatar de l’utilisateur
jak64
Messages : 85
Inscription : dim. 03/mai/2020 23:16

Re: Gestion souris avec OpenWindow et OpenWindowedScreen (HELP)

Message par jak64 »

Bonjour venom,
C'est exactement ce que je cherchais... OUF....

Merci beaucoup à toi et à Falsam.
Mesa
Messages : 1092
Inscription : mer. 14/sept./2011 16:59

Re: Gestion souris avec OpenWindow et OpenWindowedScreen (HELP)

Message par Mesa »

Dans l'aide, il y a un exemple tout prêt dans la fonction ReleaseMouse(), je le mets en dessous.

Code : Tout sélectionner

; Quelques variables
  MargeG = 20 
  MargeH = 20 
  LargeurEcran = 440 
  HauteurEcran = 440 

  ; Initialisation du monde 2D
  InitSprite()
  InitMouse() 
  
  ; Ouverture de la fenêtre et de l'écran
  OpenWindow(0,0,0,650,480,"Capture/Libération de la souris",#PB_Window_ScreenCentered|#PB_Window_SystemMenu) 
  ButtonGadget(1,500,440,120,24,"Cliquez !") 
  OpenWindowedScreen(WindowID(0),20,20,LargeurEcran,HauteurEcran,0,0,0) 

  ; Gestion de la fenêtre et de l'écran
  Repeat
    
    Repeat ; Gestion de la fenêtre
      Event  = WindowEvent()  
      Select Event 
        Case #PB_Event_Gadget 
          If EventGadget() = 1     ; Si Clic sur le Bouton "Cliquez !"
            MessageRequester("Attention","Bouton cliqué !") 
          EndIf 
        Case #PB_Event_CloseWindow ; Si fermeture de la fenêtre
          End
      EndSelect
      
      ; Affichage de la position de la souris dans la fenêtre
      SetWindowTitle(0, "Capture/Libération de la souris X= " + Str(mx) + " Y= "+ Str(my))
    Until Event =  0 
    
    ; Gestion de la capture de la souris dans l'écran noir
      If inScreen = #True       ; Si la souris est dans l'écran noir...
        If MouseX() > LargeurEcran-2 Or MouseY() > HauteurEcran-2 Or MouseX() < 1 Or MouseY() <1 
              ReleaseMouse(#True)   ; ...et si elle s'approche des bords de l'écran alors on libère la souris
              inScreen = #False 
          EndIf  
      Else                      
        mx = WindowMouseX(0)      ; Sinon, si la souris entre dans l'écran noir...
        my = WindowMouseY(0)
        If mx < LargeurEcran + MargeG And mx > MargeG And my > MargeH And my < MargeH + HauteurEcran                         
          ReleaseMouse(#False)    ; ... alors on capture la souris 
            MouseLocate(mx-MargeG,my-MargeH) 
            inScreen = #True 
        EndIf 
    EndIf 
    
    ; Affichage de l'écran noir
    ClearScreen(0) 
    StartDrawing(ScreenOutput()) 
        DrawText(150,200,"Souris relachée") 
        DrawText(180,230,"X= ")
        DrawText(180,260,"Y= ")
    StopDrawing()  
    If inScreen  ; Si la souris est dans l'écran noir... 
        ExamineMouse() 
        StartDrawing(ScreenOutput())
        FrontColor(RGB(255,255,0))
        DrawText(150,200,"Souris capturée" ) 
        DrawText(180,230,"X= "+ Str(MouseX())) 
        DrawText(180,260,"Y= "+ Str(MouseY()))
        DrawText(MouseX(), MouseY(), "["+Chr(164)+"]")
        StopDrawing() 
    EndIf 
    FlipBuffers() 
 ForEver


M.
Répondre