J'ai réalisé un nouvel exemple pour changer d'écran de jeu, mais j'ai un bug que je ne comprends pas :
Visiblement, lorsque je perds le "focus" de la souris, je ne peux plus utiliser le clavier, c'est bizaere

Si vous avez une idée, je suis preneur

voici le code :
Code : Tout sélectionner
;{********************* constantes, variable *************
;- Constantes
#FPS_LIMIT = 60
;general, pour les settings
Enumeration
#WINDOW_MAIN
EndEnumeration
;}
;{********************* Structure *********************
Structure s_setting
choix.i
screenH.i
screenW.i
ecran.i
room.i
room_width.i
room_height.i
quit.i
time1.i
keyboard_ok.i ; pour savoir si on peut examiner le clavier
EndStructure
;}
;{********************* declaration *********************
; initialisation et boucle generales
Declare initGeneral(*setting.s_setting) ; l'initialisation generale principale
Declare mainGeneral(*setting.s_setting) ; la boucle generale principale
Declare intro(*setting.s_setting)
; les rooms
Declare room_menu(*setting.s_setting)
; les evenements
Declare quit(*setting.s_setting) ; pour quitter le jeu
;}
;{********************* on lance le jeu *****************
initGeneral(@setting)
mainGeneral(@setting)
End
;}
;{********************** Les procedures *****************
Procedure initGeneral(*setting.s_setting)
;on initialise ce qui est nécessaire
If InitKeyboard() And InitSprite() And InitSprite3D() And UsePNGImageDecoder() And InitMouse()
;
Else
MessageRequester("Erreur","Impossible d'initialiser le jeu.")
End
EndIf
;on définit les setting du jeu
With *setting
\room =1
\room_width = 640
\room_height = 480
\ecran =1
\screenW = 640
\screenH = 480
\choix = 0
\keyboard_ok = 1
EndWith
; on ouvre la fenêtre, puis l'écran
If OpenWindow(#WINDOW_MAIN,150,150,*setting\screenW,*setting\screenH,"3 Arks - Room",#PB_Window_SystemMenu|#PB_Window_ScreenCentered|#PB_Window_MinimizeGadget)
If OpenWindowedScreen(WindowID(#WINDOW_MAIN),0,0,*setting\screenW,*setting\screenH,0,0,0,#PB_Screen_WaitSynchronization )
; on continue
Else
MessageRequester("Erreur","Impossible d'ouvrir un écran.")
End
EndIf
Else
MessageRequester("Erreur","Impossible d'ouvrir une fenêtre.")
End
EndIf
; puis, on lance la procedure mainGeneral()
EndProcedure
Procedure mainGeneral(*setting.s_setting)
;on peut charger des procedures ici par exemple
; pour les menus, les cartes, les sprites, personnages, etc...
;initmenu() ; n'existe pas encore
Repeat
event.l = WindowEvent()
If (ElapsedMilliseconds() > CheckTime + 1000 / #FPS_LIMIT)
CheckTime = ElapsedMilliseconds()
If *setting\room = 1
intro(*setting)
ElseIf *setting\room = 2
room_menu(*setting)
quit(*setting)
EndIf
Else
Delay(5)
EndIf
;quit(*setting)
Until *setting\quit = 1 Or event =#PB_Event_CloseWindow
EndProcedure
Procedure intro(*setting.s_setting)
;
; If OpenWindow(#WINDOW_MAIN,150,150,*setting\screenW/2,*setting\screenH/2,"3 Arks - intro",#PB_Window_SystemMenu|#PB_Window_ScreenCentered|#PB_Window_MinimizeGadget)
; If OpenWindowedScreen(WindowID(#WINDOW_MAIN),0,0,*setting\screenW/2,*setting\screenH/2,0,0,0,#PB_Screen_WaitSynchronization )
; ; on continue
; Else
; MessageRequester("Erreur","Impossible d'ouvrir un écran.")
; End
; EndIf
; Else
; MessageRequester("Erreur","Impossible d'ouvrir une fenêtre.")
; End
; EndIf
Define event.l
*setting\time1 = 50
Repeat
event.l = WindowEvent()
FlipBuffers()
ClearScreen(RGB(100,100,100))
StartDrawing(ScreenOutput())
DrawText(50,50,"Ceci est la premier room d'Intro")
StopDrawing()
*setting\time1 -1
;quit(*setting)
If event = #PB_Event_CloseWindow
End
EndIf
Until *setting\time1 <=0 Or *setting\quit = 1 Or event =#PB_Event_CloseWindow
*setting\room = 2
EndProcedure
Procedure room_menu(*setting.s_setting)
; Define event.l
; Repeat
; event.l = WindowEvent()
;
FlipBuffers()
ClearScreen(RGB(175,175,175))
StartDrawing(ScreenOutput())
DrawText(300,100,"ceci est le jeu")
StopDrawing()
;quit(*setting)
; If event = #PB_Event_CloseWindow
; End
; EndIf
; Until *setting\quit = 1 Or event =#PB_Event_CloseWindow
; End
EndProcedure
Procedure quit(*setting.s_setting)
If *setting\keyboard_ok = 1
If ExamineKeyboard()
If KeyboardPushed(#PB_Key_Escape)
*setting\quit= 1
EndIf
Else
MessageRequester("Erreur","Impossible d'examiner le clavier.")
*setting\keyboard_ok = 0
EndIf
EndIf
EndProcedure
;}