Besoin conseil resolution écran pour jeux

Programmation avancée de jeux en PureBasic
chandler
Messages : 16
Inscription : lun. 27/déc./2021 18:33

Besoin conseil resolution écran pour jeux

Message par chandler »

Bonjour
Je viens d'acheter la version complète de purebasic :D et je voudrai refaire un petit jeu que j'ai programmé avec la version gratuite donc en 800x600 plein écran. Dans une resolution plus élevé qui s'adapterai le mieux aux taille des écrans moderne et surtout le plus important qu'il soit aux meilleurs proportions. Voilà si quelqu'un à des conseils je suis preneur :) merci
darius676
Messages : 89
Inscription : dim. 02/janv./2022 23:12

Re: Besoin conseil resolution écran pour jeux

Message par darius676 »

ce code (extrait) fonctionne dans mon jeu actuel (AWAKENING), quels que soient la résolution du bureau et les paramètres DPI utilisés.
Cependant, des rapports d'aspect fortement déviés entraînent un affichage compressé/étiré.
Sous des résolutions et des rapports d'aspect courants, cet effet est négligeable
:

Code : Tout sélectionner

Procedure E_Open_Display_WIN_MAX(display_x,display_y,display_w,display_h,display_name.s)
  
 ;fullscreen (windowed screen)
  
  Define ok.b=0
  
  
  If  e_fullscreen.b=#False
  ProcedureReturn #False ;we did not set to fullscreen  
  EndIf
  
  
  Select e_vsync
      
    Case #True
      v_display_id=OpenWindow(#ENGINE_WINDOW_ID,display_x,display_y,e_engine_internal_screen_w/DesktopResolutionX(),e_engine_internal_screen_h/DesktopResolutionY(),"Thorins Quest"+e_copy_right_text.s,#PB_Window_BorderLess)
      v_display_id=WindowID(#ENGINE_WINDOW_ID)
      v_screen_id=OpenWindowedScreen(v_display_id,display_x,display_y,e_engine_internal_screen_w,e_engine_internal_screen_h,#True,0,0,#PB_Screen_WaitSynchronization)
      StickyWindow(#ENGINE_WINDOW_ID,#False)
      ShowCursor_(#False)  ;show mouse pointer if game is runing in full window
      
    Default 
      
      v_display_id=OpenWindow(#ENGINE_WINDOW_ID,display_x,display_y,e_engine_internal_screen_w/DesktopResolutionX(),e_engine_internal_screen_h/DesktopResolutionY(),"Thorins Quest"+e_copy_right_text.s,#PB_Window_BorderLess)
      v_display_id=WindowID(#ENGINE_WINDOW_ID)
      v_screen_id=OpenWindowedScreen(v_display_id,display_x,display_y,e_engine_internal_screen_w,e_engine_internal_screen_h,#True,0,0,#PB_Screen_NoSynchronization)
      StickyWindow(#ENGINE_WINDOW_ID,#False)
      ShowCursor_(#False)  ;show mouse pointer if game is runing in full window
      
  EndSelect
  
  e_npc_text_field_x.f=0
  e_npc_text_field_y.f=ScreenHeight()-ScreenHeight()/6
  e_npc_text_field_w.f=ScreenWidth()
  e_npc_text_field_h.f=ScreenHeight()/6
  

  ResizeWindow(#ENGINE_WINDOW_ID,0,0,DesktopWidth(0)/DesktopResolutionX(),DesktopHeight(0)/DesktopResolutionY())



EndProcedure
chandler
Messages : 16
Inscription : lun. 27/déc./2021 18:33

Re: Besoin conseil resolution écran pour jeux

Message par chandler »

Merci je vais regarder ça :)
darius676
Messages : 89
Inscription : dim. 02/janv./2022 23:12

Re: Besoin conseil resolution écran pour jeux

Message par darius676 »

there some confusing situations with purebasic using DPI, some solutions work, but should not... some should work but dont.
I am confused about all this working/not working,
this example works with PureBasic Beta 6 V5 CBackend,
if you try it with Beta 6 it will fail....

this routine works for fullscreen (windowed screen) using PureBasic Beta 6 V5 CBackend:

Code : Tout sélectionner

Procedure E_Open_Display_WIN_MAX(display_x,display_y,display_w,display_h,display_name.s)
  
 ;fullscreen (windowed screen)
  
  Define ok.b=0
  
  
  If  e_fullscreen.b=#False
  ProcedureReturn #False ;we did not set to fullscreen  
  EndIf
  
  
  Select e_vsync
      
    Case #True
      v_display_id=OpenWindow(#ENGINE_WINDOW_ID,display_x,display_y,e_engine_internal_screen_w,e_engine_internal_screen_h,"Thorins Quest"+e_copy_right_text.s,#PB_Window_BorderLess)
      v_display_id=WindowID(#ENGINE_WINDOW_ID)
      v_screen_id=OpenWindowedScreen(v_display_id,display_x,display_y,e_engine_internal_screen_w,e_engine_internal_screen_h,#True,0,0,#PB_Screen_WaitSynchronization)
     
      
    Default 
      
      v_display_id=OpenWindow(#ENGINE_WINDOW_ID,display_x,display_y,e_engine_internal_screen_w,e_engine_internal_screen_h,"Thorins Quest"+e_copy_right_text.s,#PB_Window_BorderLess)
      v_display_id=WindowID(#ENGINE_WINDOW_ID)
      v_screen_id=OpenWindowedScreen(v_display_id,display_x,display_y,e_engine_internal_screen_w,e_engine_internal_screen_h,#True,0,0,#PB_Screen_NoSynchronization)
     
       ;do not show mouse pointer if game is runing in full window
      
  EndSelect
  
  e_npc_text_field_x.f=0
  e_npc_text_field_y.f=ScreenHeight()-ScreenHeight()/6
  e_npc_text_field_w.f=ScreenWidth()
  e_npc_text_field_h.f=ScreenHeight()/6
  StickyWindow(#ENGINE_WINDOW_ID,#False)
  ShowCursor_(#False)
  ResizeWindow(#ENGINE_WINDOW_ID,0,0,DesktopWidth(0)/DesktopResolutionX(),DesktopHeight(0)/DesktopResolutionY())
  
  
  
EndProcedure
Répondre