Page 1 sur 1

gestion souris et OpenWindowedScreen ???

Publié : lun. 28/sept./2020 19:55
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

Re: gestion souris et OpenWindowedScreen ???

Publié : lun. 28/sept./2020 20:54
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:






@++

Re: gestion souris et OpenWindowedScreen ???

Publié : mar. 29/sept./2020 10:33
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.

Re: gestion souris et OpenWindowedScreen ???

Publié : mar. 29/sept./2020 20:27
par venom
Ah...
Tu souhaites donc faire un RelaseMouse()






@++

Re: gestion souris et OpenWindowedScreen ???

Publié : dim. 04/oct./2020 14:49
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

Re: gestion souris et OpenWindowedScreen ???

Publié : dim. 04/oct./2020 19:33
par venom
@falsam,

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





@++

Re: gestion souris et OpenWindowedScreen ???

Publié : lun. 05/oct./2020 21:12
par Ar-S
Merci pour cet exemple Falsam