Réglage selon résolution d'écran

Sujets variés concernant le développement en PureBasic
Avatar de l’utilisateur
SPH
Messages : 4945
Inscription : mer. 09/nov./2005 9:53

Réglage selon résolution d'écran

Message par SPH »

Salut,

pour ceux qui ont une resolution > a 1920*1080, pouvez vous executer ce code ?

Merci
(les 2 questions apparaitront a l'ecran)

Code : Tout sélectionner

;;;;;; un test de resolution ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;é
InitSprite() 
InitMouse() 
InitKeyboard()


win=OpenWindow(#PB_Any, 0, 0, 0, 0, "resolution test", #PB_Window_Maximize |  #PB_Window_BorderLess )
scr_w=WindowWidth(win)
scr_h=WindowHeight(win)
OpenWindowedScreen (WindowID(win),0 , 0, scr_w, scr_h, 0, 0, 0, #PB_Screen_SmartSynchronization)
ShowCursor_(0) ; CRISOT - On cache le curseur.
ShowCursor_(0) ; CRISOT - On cache le curseur.

If scr_w>=1920
  scr_w2=(scr_w-1920)/2
Else
  scr_w2=0
EndIf
If scr_h>=1080
  scr_h2=(scr_h-1080)/2
Else
  scr_h2=0
EndIf

LoadFont(1, "Times New Roman", 30)
;;;;;;;;;;
StartDrawing(ScreenOutput()) : DrawingMode(#PB_2DDrawing_Transparent)
Circle(10,10,10,RGB(0,255,0))
StopDrawing()
GrabSprite(0,0,0,20,20)

Repeat
  mx=WindowMouseX(win)	
  my=WindowMouseY(win)  
  While WindowEvent() : Wend
  
  ClearScreen(RGB(44,44,44))
  
  StartDrawing(ScreenOutput()) : DrawingMode(#PB_2DDrawing_Transparent)
  DrawingFont(FontID(1))
  
  DrawText(scr_w2+21,scr_h-scr_h2-58,"bottom left",RGB(255,55,55))
  DrawingFont(FontID(1))
  DrawText(scr_w2+20,scr_h2+16,"Top left",RGB(255,55,55))
  DrawText(250,350,"Voyez vous les textes en haut gauche et en bas gauche ?",RGB(255,255,255))
  DrawText(250,400,"Do you see the texts at the top left and bottom left ?",RGB(255,255,255))
  DrawText(250,550,"Y a t'il un bug graphique quand la souris est hors ecran ?",RGB(255,255,0))
  DrawText(250,600,"Is there a graphical bug when the mouse is offscreen ?",RGB(255,255,0))
  StopDrawing()
  DisplayTransparentSprite(0,mx,my)
  FlipBuffers()
  
  ExamineKeyboard() 
  Delay(1)
Until KeyboardPushed(#PB_Key_Escape)
End

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

!i!i!i!i!i!i!i!i!i!
!i!i!i!i!i!i!
!i!i!i!
//// Informations ////
Intel Core i7 4770 64 bits - GTX 650 Ti
Version de PB : 6.12LTS- 64 bits
Avatar de l’utilisateur
falsam
Messages : 7324
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Réglage selon résolution d'écran

Message par falsam »

Quand on sort du screen, le cursor vert apparait dans le coin haut gauche.

Que dire sur ta manie de faire du StartDrawing(ScreenOutput()) 😁
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%
nemerod
Messages : 40
Inscription : mer. 24/août/2022 0:58

Re: Réglage selon résolution d'écran

Message par nemerod »

les fonction de l'api de ExamineMouse sont juste a chié quant tu est en mode fenetré
prefer un truc de se type, au moins tu sais que la souri meme si elle sorte, elle sera pas avec une position étrange

Code : Tout sélectionner

  gmx=(DesktopMouseX()-WindowX(0,1))
  gmy=(DesktopMouseY()-WindowY(0,1))
inutile de faire 2 fois le

Code : Tout sélectionner

ShowCursor_(0)
c'est quoi se code au passage pour placé des texte dans des angle ?
Avatar de l’utilisateur
falsam
Messages : 7324
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Réglage selon résolution d'écran

Message par falsam »

@SPH Je sais que tu codes tout le temps de cette manière et que tant que ça fonctionne tu continueras de cette manière 🤣

Même si il est fonctionnel, ton code mérite quelques corrections d'optimisation.

Arrête avec tes StartDrawing(ScreenOutput()) dans la boucles de rendering. Travaille avec des sprites.
Utilise MouseX() MouseY() pour des jeux au lieu de WindowMouseX() et WindowMouseY() plus adéquates pour des applications classiques.
Evidement l'API pour cacher la souris ne sert à rien hein ?

Code : Tout sélectionner

ShowCursor_(0) ; CRISOT - On cache le curseur.

Ton code corrigé

Code : Tout sélectionner

;;;;;; un test de resolution ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;é
InitSprite() 
InitMouse() 
InitKeyboard()

win=OpenWindow(#PB_Any, 0, 0, 0, 0, "resolution test", #PB_Window_Maximize |  #PB_Window_BorderLess )
scr_w=WindowWidth(win)
scr_h=WindowHeight(win)
OpenWindowedScreen (WindowID(win),0 , 0, scr_w, scr_h, 0, 0, 0, #PB_Screen_SmartSynchronization)

If scr_w>=1920
  scr_w2=(scr_w-1920)/2
Else
  scr_w2=0
EndIf
If scr_h>=1080
  scr_h2=(scr_h-1080)/2
Else
  scr_h2=0
EndIf

LoadFont(1, "Times New Roman", 30)

; Creation du cruseur de souris
CreateSprite(0, 20, 20)
If StartDrawing(SpriteOutput(0))
  Circle(10,10,10,RGB(0,255,0))
  StopDrawing()
EndIf

; Création du background au dimention du screen
CreateSprite(1, ScreenWidth(), ScreenHeight())
If StartDrawing(SpriteOutput(1)) : DrawingMode(#PB_2DDrawing_Transparent)
  DrawingFont(FontID(1))
  
  DrawText(scr_w2+21,scr_h-scr_h2-58,"bottom left",RGB(255,55,55))
  DrawingFont(FontID(1))
  DrawText(scr_w2+20,scr_h2+16,"Top left",RGB(255,55,55))
  DrawText(250,350,"Voyez vous les textes en haut gauche et en bas gauche ?",RGB(255,255,255))
  DrawText(250,400,"Do you see the texts at the top left and bottom left ?",RGB(255,255,255))
  DrawText(250,550,"Y a t'il un bug graphique quand la souris est hors ecran ?",RGB(255,255,0))
  DrawText(250,600,"Is there a graphical bug when the mouse is offscreen ?",RGB(255,255,0))
  StopDrawing()
EndIf 


Repeat
  While WindowEvent() : Wend
  
  ClearScreen(RGB(44,44,44))
  
  DisplayTransparentSprite(1, 0, 0)
  DisplayTransparentSprite(0,mx,my)
  
  ExamineMouse()
  mx=MouseX()	
  my=MouseY()  
  
  ExamineKeyboard() 
  
  FlipBuffers()  
Until KeyboardPushed(#PB_Key_Escape)
End
Je sais que tu vas me répondre que ca fonctionne aussi bien que le tien. Toutefois regarde bien les occupations CPU et mémoire.
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
SPH
Messages : 4945
Inscription : mer. 09/nov./2005 9:53

Re: Réglage selon résolution d'écran

Message par SPH »

Waouw, tu utilises un sprite gros d'un écran !
Bon ok. Mais par contre, je n'ai pas compris comment tu caches la flèche de la souris !
(dis moi tout)

!i!i!i!i!i!i!i!i!i!
!i!i!i!i!i!i!
!i!i!i!
//// Informations ////
Intel Core i7 4770 64 bits - GTX 650 Ti
Version de PB : 6.12LTS- 64 bits
Avatar de l’utilisateur
falsam
Messages : 7324
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Réglage selon résolution d'écran

Message par falsam »

SPH a écrit : jeu. 06/avr./2023 18:06 Mais par contre, je n'ai pas compris comment tu caches la flèche de la souris
ExamineMouse() fait le job
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
falsam
Messages : 7324
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Réglage selon résolution d'écran

Message par falsam »

Pour information, tu peux connaitre les différentes résolutions possibles acceptées par l'environnement graphique de l'utilisateur.

Code : Tout sélectionner

InitSprite()

If ExamineScreenModes()
  While NextScreenMode()
    Debug Str(ScreenModeWidth())+"x"+Str(ScreenModeHeight())+"x"+Str(ScreenModeDepth())+"@"+Str(ScreenModeRefreshRate())+"Hz"
  Wend
EndIf
ce qui donne
640x480x32@60Hz
640x480x32@144Hz
800x600x32@60Hz
800x600x32@144Hz
1024x768x32@60Hz
1024x768x32@144Hz
1280x720x32@60Hz
1280x720x32@144Hz
1280x960x32@60Hz
1280x960x32@144Hz
1280x1024x32@60Hz
1280x1024x32@144Hz
1680x1050x32@60Hz
1680x1050x32@144Hz
1920x1080x32@60Hz
1920x1080x32@144Hz
A toi de choisir celle qui t'intéresse pour ton jeu.
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%
nemerod
Messages : 40
Inscription : mer. 24/août/2022 0:58

Re: Réglage selon résolution d'écran

Message par nemerod »

falsam a écrit : jeu. 06/avr./2023 17:19 Bonsoir et désolé et surtout pardon
mais bon le savais la lib
...
Utilise MouseX() MouseY() pour des jeux au lieu de WindowMouseX() et WindowMouseY() plus adéquates pour des applications classiques.
Evidement l'API pour cacher la souris ne sert à rien hein ?

Code : Tout sélectionner

ShowCursor_(0) ; CRISOT - On cache le curseur.

T...
alors je vais expliqué un peu, SPH fais un travaille, et c'est une chose que soit je confirme pas a 100%
mais le faite que tu dit que l'api ne sert a rien, je peu te donné tout le listing des api utilisé et les detail relatif a se sujet
donc si il utilise pas la lib MOUSE c'est la solution la plus propre et surtout dans un OpenWindow et OpenWindowedScreen
donc désolé falsam mais NE PAS utilisé la lib MOUSE est limite un avantage comparé au reste des possibilité, car la LIB MOUSE utilise aussi la fonction et bien d'autre et surtout que la techno DirectX est utilisé,, donc plus lourd et n'est pas conseillé dans des programme classique et surtout que la lib MOUSE a un problème si tu déplace trop vite la souri car la lib a une mauvais gestion de cela

je tien a précisé que les message n'on pas pour but de frustré ou offensé qui que se sois, mais je trouve que cela manque d'argument

DONC PARDON, mais SPH je te conseil de te faire toi meme ton système pour la souri selon tes besoin car des jeu on une gestion plus propre et plus moderne que purebasic version 6 avec ogre
ENSUIT, je suis vraiment désolé mais voir que tu demande de ne pas utilisé l'api alors que les LIB utilise elle meme l'api mais on des problème

AU MOINS se que je propose peu être utilisé sur du multi screen ET la position SERA toujours valide meme si la souri est sorti, et donc si c'est en mode fenêtré si il déplacé la souri, au moins le truc ne va pas se retrouvé freeze ou stoppé, se qui est hyper lourd en terme de jouabilité
Avatar de l’utilisateur
falsam
Messages : 7324
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Réglage selon résolution d'écran

Message par falsam »

J'ai donné mon avis. SPH fait ce qu'il veut. Si il veut continuer à utilise des API au lieu des fonctionnalités natives de PureBasic, libre à lui de le faire et tant pis si ses codes fonctionnent uniquement pour windows ;)

Si SPH préfère continuer à faire des StartDrawing(ScreenOutput()) dans la boucles de rendering, libre à lui aussi de le faire.

Si SPH veut continuer à faire des Goto et Gosub libre à lui aussi de le faire 👍😁🤣
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
SPH
Messages : 4945
Inscription : mer. 09/nov./2005 9:53

Re: Réglage selon résolution d'écran

Message par SPH »

J'apprends chaque jour.

La, j'ai appris que examinemouse (qui porte mal son nom) permet de cacher le pointeur de la souris :arrow: :D

!i!i!i!i!i!i!i!i!i!
!i!i!i!i!i!i!
!i!i!i!
//// Informations ////
Intel Core i7 4770 64 bits - GTX 650 Ti
Version de PB : 6.12LTS- 64 bits
Avatar de l’utilisateur
falsam
Messages : 7324
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Réglage selon résolution d'écran

Message par falsam »

SPH a écrit : jeu. 06/avr./2023 21:05 J'apprends chaque jour.

La, j'ai appris que examinemouse (qui porte mal son nom) permet de cacher le pointeur de la souris :arrow: :D
Pas que cacher la souris.

ExamineMouse() permet aussi de connaitre la position X Y de la souris, de savoir sur quel bouton de la souris l'utilisateur a appuyé et de connaitre aussi le déplacement horizontal et vertical de la souris.

-MouseX(), MouseY() pour connaitre la position de la souris,
-MouseButton() pour tester si un bouton de la souris est enfoncé;
-MouseDeltaX() Teste le déplacement horizontal de la souris.
-MouseDeltaY() Teste le déplacement vertical de la souris.
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
SPH
Messages : 4945
Inscription : mer. 09/nov./2005 9:53

Re: Réglage selon résolution d'écran

Message par SPH »

falsam a écrit : jeu. 06/avr./2023 21:15
SPH a écrit : jeu. 06/avr./2023 21:05 J'apprends chaque jour.

La, j'ai appris que examinemouse (qui porte mal son nom) permet de cacher le pointeur de la souris :arrow: :D
Pas que cacher la souris.

ExamineMouse() permet aussi de connaitre la position X Y de la souris, de savoir sur quel bouton de la souris l'utilisateur a appuyé et de connaitre aussi le déplacement horizontal et vertical de la souris.

-MouseX(), MouseY() pour connaitre la position de la souris,
-MouseButton() pour tester si un bouton de la souris est enfoncé;
-MouseDeltaX() Teste le déplacement horizontal de la souris.
-MouseDeltaY() Teste le déplacement vertical de la souris.
Je savais tout; sauf cacher la souris 8O

!i!i!i!i!i!i!i!i!i!
!i!i!i!i!i!i!
!i!i!i!
//// Informations ////
Intel Core i7 4770 64 bits - GTX 650 Ti
Version de PB : 6.12LTS- 64 bits
Ollivier
Messages : 4197
Inscription : ven. 29/juin/2007 17:50
Localisation : Encore ?
Contact :

Re: Réglage selon résolution d'écran

Message par Ollivier »

Et MouseWheel() aussi. La roulette qui n'est accessible que sur canvas en GUI de l'OS.

Pour la librairie Mouse native en mode fenêtré, c'est vrai que la lib est un peu psycho-rigide pour gérer parfaitement la souris selon son survol (Zone graphique versus zone OS GUI).

Mais ce n'est pas une raison pour s'énerver, cher nemerod. Sur le forum US, netmaestro a fourni un code dès qu'il a commencé (tardivement) à s'intéresser au screen. Ça doit être autour de 2012 (plus ou moins un an).

Il y a juste à récupérer ce modèle de code, et le problème est résolu. Sans API, ça permet de faire un code multi-plateforme.
Ollivier
Messages : 4197
Inscription : ven. 29/juin/2007 17:50
Localisation : Encore ?
Contact :

Re: Réglage selon résolution d'écran

Message par Ollivier »

La version polie qui indique un problème de la lib mouse le 25 Août 2006...

Puis la solution qui étaye l'info parfaitement légitime de falsam :
https://www.purebasic.fr/english/viewtopic.php?p=187468 (22 Mars 2007)

Au temps pour moi, j'ai carrément sous-estimé la précocité de la solution : ça fait 16 ans que la lib mouse est parfaitement fonctionnelle sans API en screen fenêtré.
Avatar de l’utilisateur
falsam
Messages : 7324
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Réglage selon résolution d'écran

Message par falsam »

Ollivier a écrit : dim. 09/avr./2023 20:59 Et MouseWheel() aussi. La roulette qui n'est accessible que sur canvas en GUI de l'OS.
Que sur le canvas non ? MouseWheel() permet de savoir si on titille la molette vers le haut ou vers le bas en 2D/3D

Et sans API 😂
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%
Répondre