[JEU] Menu, écran, boutons

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Avatar de l’utilisateur
blendman
Messages : 2017
Inscription : sam. 19/févr./2011 12:46

Re: [JEU] Menu, écran, boutons

Message par blendman »

salut

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
;}
Avatar de l’utilisateur
flaith
Messages : 1487
Inscription : jeu. 07/avr./2005 1:06
Localisation : Rennes
Contact :

Re: [JEU] Menu, écran, boutons

Message par flaith »

J'avais commencé un jeu (que je finirais un jour très proche) avec menu (utilisable uniquement avec le clavier)
Lien : Can't Stop Running ! :wink:
Avatar de l’utilisateur
blendman
Messages : 2017
Inscription : sam. 19/févr./2011 12:46

Re: [JEU] Menu, écran, boutons

Message par blendman »

salut

J'ai bien regardé ton fichier, mais j'essaie autre chose et pour le moment, ça fonctionne à peu près :P.
Par contre, ça utilise une boucle, à l'intérieur d'une autre boucle, alors, je ne sais pas si c'est terrible ce genre de chose.
jbernard13
Messages : 1501
Inscription : dim. 18/avr./2004 15:04
Localisation : sud de la france

Re: [JEU] Menu, écran, boutons

Message par jbernard13 »

Merci pour les codes
Jbernard13
Répondre