gestion souris et OpenWindowedScreen ???

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Avatar de l’utilisateur
jak64
Messages : 89
Inscription : dim. 03/mai/2020 23:16

gestion souris et OpenWindowedScreen ???

Message par jak64 »

Bonjour,
je ne comprends pas la gestion de la souris dans le programme ci-dessous (j'ai dessiné une souris en Sprite):

1) Pourquoi "ma" souris ne se déplace pas sur l'écran lorsque je déplace physiquement la souris sur le tapis ?
2) Il apparaît la souris "Système" : pourquoi il n'y a aucun effet lorsque je clique sur le X au milieu de l'écran ?
3) Comment faire pour pouvoir fermer le programme avec la souris "système" mais pouvoir gérer mon jeu avec ma propre souris définie en Sprite ?

Merci de votre aide.

Code : Tout sélectionner

#SourisPointe=1 ; Pointe de la souris
#SourisCorps=2  ; Reste de la souris
#bouton_X=3
#jaune=$99FFFF
#Repertoire = "Ressources\"
#FenetrePrincipale=0
#LargeurEcranJeu=1366
#HauteurEcranJeu=768

If InitSprite()=0 : MessageRequester("Erreur", "InitSprite() non initialisé !"):End:EndIf
If InitMouse()=0 : MessageRequester("Erreur", "InitMouse() non initialisé !"):End:EndIf
If InitKeyboard()=0 : MessageRequester("Erreur", "InitKeyboard() non initialisé !"):End:EndIf
If InitSound() = 0 : MessageRequester("Erreur", "InitSound() non initialisé !"):End:EndIf
If InitMovie() = 0 : MessageRequester("Erreur", "InitMovie() non initialisé !"):End:EndIf

ExamineDesktops()
LargeurBureau=DesktopWidth(0)
HauteurBureau=DesktopHeight(0)

; Vérifier si l'ordi dispose de la résolution minimale pour le jeu
If LargeurBureau<#LargeurEcranJeu Or HauteurBureau<#HauteurEcranJeu
  MessageRequester("Erreur", "L'ordinateur doit avoir une résolution minimale de "+Str(#LargeurEcranJeu)+ " par "+Str(#HauteurEcranJeu)+ " pixels !")
  End
EndIf  

; Création de la fenêtre principale
If OpenWindow(#FenetrePrincipale,0,0,#LargeurEcranJeu,#HauteurEcranJeu,"test", #PB_Window_MinimizeGadget)=0
  MessageRequester("Erreur", "Impossible d'ouvrir la fenêtre principale")
  End
EndIf
; Création de la fenêtre du jeu
If OpenWindowedScreen(WindowID(#FenetrePrincipale),0,0,#LargeurEcranJeu,#HauteurEcranJeu,1,0,0)=0
  MessageRequester("Erreur", "Impossible d'ouvrir la fenêtre de jeu")
  End
EndIf
ResizeWindow(#FenetrePrincipale,0,0,LargeurBureau,HauteurBureau)

LoadSprite(#SourisPointe, #Repertoire+"SourisPointe.bmp", #PB_Sprite_PixelCollision)
LoadSprite(#SourisCorps, #Repertoire+"SourisCorps.bmp", #PB_Sprite_PixelCollision)
LoadSprite(#bouton_X, #Repertoire+"bouton_X.bmp", #PB_Sprite_PixelCollision)

Repeat
  Repeat
    Event = WindowEvent()
    Select Event  
      Case #PB_Event_CloseWindow
        End 
    EndSelect
  Until Event = 0
  ClearScreen(#jaune)
  DisplayTransparentSprite(#bouton_X, 600,300)    
  DisplayTransparentSprite(#SourisPointe, MouseX(),MouseY()) 
  DisplayTransparentSprite(#SourisCorps, MouseX(),MouseY()+6)
  If SpritePixelCollision(#SourisCorps,MouseX(),MouseY()+6,#bouton_X,600,300) And MouseButton(#PB_MouseButton_Left)
    ExamineMouse()
    While MouseButton(#PB_MouseButton_Left)
      ExamineMouse()                        
      Delay(1)
    Wend
    End
  EndIf
  FlipBuffers()
Until Event = #PB_Event_CloseWindow
Image
Avatar de l’utilisateur
venom
Messages : 3137
Inscription : jeu. 29/juil./2004 16:33
Localisation : Klyntar
Contact :

Re: gestion souris et OpenWindowedScreen ???

Message par venom »

Salut jak64,

voici un code qui je pense fait ce que tu souhaite :

Code : Tout sélectionner

Enumeration
  #Window_0
EndEnumeration

Enumeration
  #Curseur
  #Croix
EndEnumeration

Declare Initialisations()

  If OpenWindow(#Window_0, 0, 0, 400, 400, "", #PB_Window_TitleBar | #PB_Window_ScreenCentered)
   Initialisations() ; initialise les differents environments (voir en bas du code)
    If OpenWindowedScreen(WindowID(#Window_0), 0, 0, 400, 400)
      
      ; dessine le curseur de la souris
      If CreateSprite(#Curseur, 10, 10, #PB_Sprite_PixelCollision) And StartDrawing(SpriteOutput(#Curseur))
        Box(0, 0, 10, 10, RGB(255, 0, 0))
       StopDrawing() 
      EndIf 
      
      ; dessine la croix
      If CreateSprite(#Croix, 20, 20, #PB_Sprite_PixelCollision) And StartDrawing(SpriteOutput(#Croix))
        Line(0, 0, 20, 20, RGB(0, 255, 0))
        Line(20, 0, -20, 20, RGB(0, 255, 0))
       StopDrawing() 
      EndIf
     
    EndIf         
  EndIf 
  
  
  Repeat
   Repeat ; Gestion de la fenêtre
     Event  = WindowEvent() 
   Until Event = 0

   ExamineKeyboard()
   ExamineMouse()

   DisplayTransparentSprite(#Croix, 200, 200) ; affiche la croix
   
   DisplayTransparentSprite(#Curseur, MouseX(), MouseY()) ; affiche le curseur
   
   If MouseButton(#PB_MouseButton_Left) <> 0 ; test si on fait un clic gauche
    If SpritePixelCollision(#Croix, 200, 200, #Curseur, MouseX(), MouseY()) ; test si nous sommes sur la croix
     End ; si oui, on kill le programme
    EndIf 
   EndIf 
   
   FlipBuffers()
   ClearScreen(RGB(0, 0, 0))
  Until KeyboardPushed(#PB_Key_Escape) ;- Echap pour quitter
 End


Procedure Initialisations()
; Initialisation environnement sprite
If InitSprite() = 0
 MessageRequester("Erreur", "Impossible d'ouvrir l'écran & l'environnement nécessaire aux sprites !", 0)
  End
EndIf

; Initialisation environnement clavier
If InitKeyboard() = 0
 MessageRequester("Erreur", "Impossible d'initialisé le clavier !", 0)
  End
EndIf
  
; Initialisation environnement souris
If InitMouse() = 0
 MessageRequester("Erreur", "Impossible d'initialisé la souris !", 0)
  End
EndIf
EndProcedure
J'ai fait un code car je n'ayant pas tes sprites pour tester, j'en ai donc dessiner :wink:






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

Re: gestion souris et OpenWindowedScreen ???

Message par jak64 »

Bonjour,
Merci de ta réponse mais ça ne répond pas complètement à ma question.
Je veux mettre une fenêtre windows avec l'option #PB_Window_MinimizeGadget afin de réduite mon jeu dans la barre de tâches si je le souhaite en cliquant sur l'icône de réduction de la fenêtre.
Dans ton programme, le curseur dessiné n'agit que dans la fenêtre screen, je n'arrive donc pas à atteindre la barre de titre de la fenêtre windows.
Avatar de l’utilisateur
venom
Messages : 3137
Inscription : jeu. 29/juil./2004 16:33
Localisation : Klyntar
Contact :

Re: gestion souris et OpenWindowedScreen ???

Message par venom »

Ah...
Tu souhaites donc faire un RelaseMouse()






@++
Windows 10 x64, PureBasic 5.73 x86 & x64
GPU : radeon HD6370M, CPU : p6200 2.13Ghz
Avatar de l’utilisateur
falsam
Messages : 7324
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: gestion souris et OpenWindowedScreen ???

Message par falsam »

@jak64 : Je te propose de tester ma procédure ScreenFocus(Window).

■ Téléchargement : https://github.com/falsam/ScreenFocus/archive/main.zip

■ Explication : https://github.com/falsam/ScreenFocus
Configuration : Windows 11 Famille 64-bit - PB 6.20 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
venom
Messages : 3137
Inscription : jeu. 29/juil./2004 16:33
Localisation : Klyntar
Contact :

Re: gestion souris et OpenWindowedScreen ???

Message par venom »

@falsam,

J'ai pas tester ton code (j'ai juste lu) Merci du partage, je testerai a l'occasion 8)





@++
Windows 10 x64, PureBasic 5.73 x86 & x64
GPU : radeon HD6370M, CPU : p6200 2.13Ghz
Avatar de l’utilisateur
Ar-S
Messages : 9540
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: gestion souris et OpenWindowedScreen ???

Message par Ar-S »

Merci pour cet exemple Falsam
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Répondre