Remplir ou vider une barre de progression [Résolu]

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Avatar de l’utilisateur
lyn666
Messages : 13
Inscription : lun. 13/juin/2011 8:57

Remplir ou vider une barre de progression [Résolu]

Message par lyn666 »

Bonjour,

Je souhaiterait pouvoir remplir et vider une barre de progression avec les touches + et -.

J'ai déjà essayer de faire plusieurs code différent, mais aucun ne marche.

Voici un exemple d'un des codes que j'ai essayer de faire (avec la touche "espace", sans vider la barre) :

Code : Tout sélectionner

;Barre de Vie
ExamineKeyboard()
ProgressBarGadget(0,15,20,250,30,0,100)
SetGadgetState(0,1)
Test=1
If KeyboardPushed(#PB_Key_Space)
  SetGadgetState(0,Test)
  EndIf
Je n'arrive pas à voir ou est l’erreur.

Merci, Cordialement.
Dernière modification par lyn666 le ven. 17/juin/2011 12:34, modifié 1 fois.
Geo Trouvpatou
Messages : 471
Inscription : dim. 23/déc./2007 18:10

Re: Remplir ou vider une barre de progression

Message par Geo Trouvpatou »

Salut.

La prochaine fois, essaie de donner un code fonctionnel.
Quand je dis fonctionnel, je veux dire avec l'OpenWindow, la boucle etc...

Code : Tout sélectionner

OpenWindow(0, 0, 0, 280, 100, "Test", #PB_Window_SystemMenu|#PB_Window_ScreenCentered) 

ProgressBarGadget(0,15,20,250,30,0,100)
SetGadgetState(0,1)

AddKeyboardShortcut(0, #PB_Shortcut_Add, 1)
AddKeyboardShortcut(0, #PB_Shortcut_Subtract, 2)
Test = 0

Repeat 
      Select WaitWindowEvent() 
            Case #PB_Event_CloseWindow : End 
            Case #PB_Event_Menu 
                  menu = EventMenu() 
                  
                  Select menu
                        Case  1 
                              Test + 10
                              SetGadgetState(0, Test)
                              Debug Test
                              
                        Case  2
                              Test - 10
                              SetGadgetState(0, Test)
                              Debug Test
                              
                  EndSelect    
      EndSelect 
ForEver
[EDIT]J'ai oublié de préciser qu'il fallait appuyer sur les touches + et - du pavé numérique.

Je profite de cette édition pour te dire que comme tu as utilisé ProgressBarGadget pour une appli classique et KeyboardPushed de la lib 2D, je ne sais pas trop ce que tu voulais faire au juste.

Si c'est afficher une barre de progression en 2D Davyd en à fait une assez sympa.
Par contre utilise la version du soldat inconnu qui a rectifié un petit défaut du code de Davyd.

Bye.
Avatar de l’utilisateur
lyn666
Messages : 13
Inscription : lun. 13/juin/2011 8:57

Re: Remplir ou vider une barre de progression

Message par lyn666 »

Merci, c'est pour l'utilisé dans une fenêtre de jeu (OpenWindowedScreen).
Avatar de l’utilisateur
blendman
Messages : 2017
Inscription : sam. 19/févr./2011 12:46

Re: Remplir ou vider une barre de progression

Message par blendman »

salut

Tu veux faire :
1. une barre de progression : par exemple pour le chargement du jeu
2. une barre de vie : pour la vie de ton personnage (donc une barre genre rouge qui diminue ou grandit en fonction de certains évènements comme l'attaque d'un mob) ?

Si c'est le 1, le code de Geo Trouvpatou est un bonne exemple.
Si c'est le 2, le plus simple est d'utiliser un sprite.

J'ai fait un petit exemple très simple :

Code : Tout sélectionner

;{ variable
vie.b = 0
;}

;{ init
If InitKeyboard() =0 Or InitSprite() =0
  MessageRequester("Erreur", "Problème d'initialisation")
  End
EndIf  
;}

;{ window
If OpenWindow(0, 0, 0, 280, 100, "Test", #PB_Window_SystemMenu|#PB_Window_ScreenCentered) = 0
  MessageRequester("Erreur", "impossible d'ouvrir une fenètre")
  End
Else
  
  If OpenWindowedScreen(WindowID(0),0,0,280,100,0,0,0) =0
    MessageRequester("Erreur", "impossible d'ouvrir un écran")
    End
  Else
    KeyboardMode(#PB_Keyboard_International)
  EndIf
EndIf

;}

;{ sprite
; barre de vie
CreateSprite(0,100,20)
;}

;{ boucle
Repeat
  event = WindowEvent() 
  ClearScreen(RGB(120,120,120)); on efface l'écran avec du gris)
  
  ExamineKeyboard()    
  If KeyboardPushed(#PB_Key_A) 
    If vie >0
      vie - 1
    EndIf    
  EndIf
  If KeyboardPushed(#PB_Key_Z) 
    If vie <100
      vie + 1
    EndIf    
  EndIf
  
  ; graphismes
  DisplaySprite(0,10,10)
  
  StartDrawing(SpriteOutput(0)) ; on va dessiner sur le sprite 0
  Box(0,0,vie,20,RGB(255,0,0))  ; je crée la barre rouge 
  Box(vie,0,100,20,0); au dessus je mets une barre noire
  DrawingMode(#PB_2DDrawing_Transparent) ; mode transparent pour le texte
  DrawText(50-3*(Len(Str(vie)+" / 100")),2,Str(vie)+" / 100"); je positionne le texte au centre  
  StopDrawing()
  
  FlipBuffers() ; on flipe le buffer 
Until event = #PB_Event_CloseWindow Or KeyboardPushed(#PB_Key_Escape)

;}

End
Avatar de l’utilisateur
lyn666
Messages : 13
Inscription : lun. 13/juin/2011 8:57

Re: Remplir ou vider une barre de progression

Message par lyn666 »

C'est pour la version 2.

C'était surtout pour apprendre à créer une barre fonctionnelle, car dans mon jeu, j'ai l'intention d'en mettre plusieurs et aussi pour apprendre à manipuler le clavier.

Merci.

EDIT :

J'ai tester la barre de blendman et après 1 ou 2 heures de test, je pense en avoir compris l’essentiel.

Je me suis permis de modifier (un peu) le code, pour le rendre plus simple et plus lisible pour moi :D :

Code : Tout sélectionner

;- Introduction

;{ Initialisation
InitMouse()
InitKeyboard()
InitSprite()
;} Fin


;//////////////////////////////////////////////////////////


;{ Variables et constantes
Vert = RGB(128,128,65)
Rouge = RGB(255,0,0)

; Autres Variables
vie.b = 0
;} Fin


;//////////////////////////////////////////////////////////


;- I- Ecran de jeu

;{ Création et configuration de l'écran de jeu (800*600)
If OpenWindow(0, 0, 0, 800, 600, "Projet Azarda",#PB_Window_ScreenCentered|#PB_Window_MinimizeGadget|#PB_Window_SystemMenu) = 0
  End
Else
  If OpenWindowedScreen(WindowID(0),0,0,800,600,0,0,0)=0
    End
  EndIf
EndIf
;} Fin


;//////////////////////////////////////////////////////////


;{ Autres
KeyboardMode(#PB_Keyboard_International)
ClearScreen(Vert); Change la couleur de l'écran
; Sprite
CreateSprite(0,100,20)
;} Fin


;//////////////////////////////////////////////////////////


;{ Repeat, empêchant la fenêtre de fermer
Repeat
  event = WindowEvent()
;} Fin


;//////////////////////////////////////////////////////////


;{ Configuration des Barres de progressions

;Barre de Vie
ExamineKeyboard()   
  If KeyboardPushed(#PB_Key_A)
    If vie >0
      vie - 1
    EndIf   
  EndIf
  If KeyboardPushed(#PB_Key_Z)
    If vie <100
      vie + 1
    EndIf   
  EndIf
  
;Graphisme
  DisplaySprite(0,10,10)
 
  StartDrawing(SpriteOutput(0)) ; Dessine sur le sprite 0
  Box(0,0,vie,20,Rouge)  ; Crée la barre rouge
  Box(vie,0,100,20,0); Mets une barre noire, au dessus
  DrawingMode(#PB_2DDrawing_Transparent) ; Mode transparent pour le texte
  DrawText(50-3*(Len(Str(vie)+" / 100")),2,Str(vie)+" / 100"); Positionne le texte au centre 
  StopDrawing()
  
  FlipBuffers()
;} Fin


;//////////////////////////////////////////////////////////


;{ Until, suite de Repeat
 Until event=#PB_Event_CloseWindow
 End
 ;} Fin
Par contre, je ne sait pas si mes modifications vont avoir une incidence plus tard.

Merci, Cordialement. :)
Avatar de l’utilisateur
blendman
Messages : 2017
Inscription : sam. 19/févr./2011 12:46

Re: Remplir ou vider une barre de progression [Résolu]

Message par blendman »

salut

J'ai remarqué 2 ou 3 bricoles sur lesquelles on peut faire une remarque :

Code : Tout sélectionner

;{ Variables et constantes
Vert = RGB(128,128,65)
Rouge = RGB(255,0,0)
Je te conseillerai de définir le plus souvent possible tes variables.
Dans ce t exemple, ça ne changerai rien, mais dans la plupart des cas, tu auras besoin d'une variable avec uniquement 15 changement possibles, voire 2, et il serait inutile d'utiliser des .l pour toutes tes variables.

Dans ton cas, je pense que ce sera de toute façon des .l, ou des .i.
Le .i te permet, il me semble d'être un peu plus compatible avec les systèmes x64 (si je ne me trompe pas).

Code : Tout sélectionner

ClearScreen(Vert); Change la couleur de l'écran
En général, on met le clearscreen, si c'est nécessaire, dans la boucle repeat. Car le cela efface l'écran courant et ça évite d'avoir des "restes" de screen ou de "sprite" dans ton écran.

Code : Tout sélectionner

DisplaySprite(0,10,10)
ce code-ci, tu peux le mettre dans mon exemple avant startdrawing() ou après stopdrawing().
Je pense que c'est mieux de la mettre après, même si je l'avais mis avant dans mon exemple ;).
Car on modifie le sprite et après on le dessine, plutôt que le contraire (je m'étais un peu trompé sur le coup :)).

Voilà pour les quelques remarques, maintenant , on attend la suite :)
Répondre