SB : Barre de chargement de fichiers

Rubriques generale concernant SpiderBasic
Avatar de l’utilisateur
Cool Dji
Messages : 1126
Inscription : ven. 05/sept./2008 11:42
Localisation : Besançon
Contact :

SB : Barre de chargement de fichiers

Message par Cool Dji »

Hello,

Je vous propose un petit partage sur SpiderBasic.
Ce n'est pas grand chose, il s'agit d'une barre de progression de chargement des fichiers (sprites et sons) et permet de faire patienter l'utilisateur en attendant que la page soit totalement chargée.
On pourrait même mettre une image en data pour faire plus joli...

Je n'attends pas que tous les fichiers soient chargés pour lancer le RenderFrame()...

Visible ici : http://jeuxvideobesancon.fr/2018.html

Fichiers téléchargeables http://jeuxvideobesancon.fr/Telechargement/Demo2018.zip

Code : Tout sélectionner

; SpiderBasic 2.20
; CoolDji-2018

OpenScreen(1024, 768, 32, "Hello 2018")
InitSound()
EnableExplicit
; TotalLoading = nombre de fichiers à lire : 46 sprites de lettres et 1 musique

Global  j,loadingAll=0,NbLoadedElements,StartDemo,LightScreen,TotalLoading=46+1,TauxLoading.f
Global Text$,x.i,y.i,light.i,a$,i,wait$,tempowait
Declare CreateAllSprite()
Declare AffText(Text$,x.i,y.i,light.i) 
For j=1 To 20:LoadFont(j, "Arial", j*2):Next
CreateAllSprite()

Procedure RenderFrame()
 ;----- Loop
 ExamineKeyboard():ExamineMouse()

 
   
    ClearScreen(RGB(255,255,255))        ; efface l'écran
    
    If loadingAll=0   ; Les fichiers ne sont pas tous chargés
      tempowait+1     ; gere la temporisation des 3 petits points du texte
      If tempowait>20
        tempowait=0
        wait$+"."
      If wait$="....":wait$="":EndIf
     EndIf
     
   StartDrawing(SpriteOutput(100))   ; modifie le sprite de la barre de temporisation
   Box(0,0,SpriteWidth(100),SpriteHeight(100),RGB(255,255,255))  ; Efface tout
   DrawingFont(FontID(6))
   DrawText(40,0,"Loading Elements "+Str(TauxLoading*100)+"%"+wait$,RGB(72,127,140))  ; Affiche le titre de la barre
   Box(0,20,SpriteWidth(100),10,RGB(72,127,140))          ; pose un rectangle bleu
   Box(1,20+1,SpriteWidth(100)-2,10-2,RGB(255,255,255))   ; Evide le rectangle
   Box(1,21,TauxLoading*(SpriteWidth(100)-2),10-2,RGB(36,64,70)) ; met à jour la barre en fonction du taux d'avancement de chargement des fichiers
   StopDrawing()
   DisplaySprite(100,1024/2-SpriteWidth(100)/2,100)  ; Affiche le sprite
   
 Else  ; On est ici car tous les fichiers ont été chargés
   If LightScreen=0  ; premier passage
     PlaySound(0,#PB_Sound_Loop)  ; joue PB => Petit Biscuit
   EndIf  
   LightScreen+5  ; Allume l'écran noir, représenté par le sprite 101
  If LightScreen>255:LightScreen=255 :EndIf
  DisplayTransparentSprite(101,0,0,LightScreen)
  
  Afftext("HELLO 2018",280,100,255)   ; Affiche le texte avec la procédure Afftext
 
EndIf  


  FlipBuffers() ; continue the rendering
EndProcedure

Procedure CreateAllSprite()
 CreateSprite(100,200,30)    ; Sprite de la barre d'avancement
 CreateSprite(101,1024,768)  ; Sprite pour un ecran noir qui peut s'afficher par fade Off/On
 
 
EndProcedure

Procedure Loading(Type, Filename$)

  NbLoadedElements+1
  TauxLoading=NbLoadedElements/TotalLoading
    Debug Filename$ + " " + NbLoadedElements +" " +TauxLoading

  If NbLoadedElements = TotalLoading ; Finished the loading of all images and sounds, we can start the applications
    loadingAll=1
    ; FlipBuffers() ; start the rendering
  EndIf
EndProcedure

Procedure LoadingError(Type, Filename$)
  Debug Filename$ + ": loading error"
EndProcedure

Procedure AffText(Text$,x.i,y.i,light.i)          ; Affiche du text avec la police de taille normale
For j=1 To Len(Text$)                              ; Fait une boucle sur le nombre de caractères à afficher
  a$=Mid(Text$,j,1)                                ; Prends un caractère après l'autre
   If (Asc(a$)>=Asc("-")) And (Asc(a$)<=Asc("Z"))  ; vérifie que le caractère existe
       i.i=Asc(a$)-45                              ; rappel : le code Ascii de $ est 36
       DisplayTransparentSprite(i+1000,x+Random(4),y+Random(4),light)         ; Affiche le sprite du caractere
     EndIf
   x+SpriteWidth(i+1000)+2
 Next
EndProcedure

; Register the loading event before calling any resource load command
BindEvent(#PB_Event_Loading, @Loading())
BindEvent(#PB_Event_LoadingError, @LoadingError())
BindEvent(#PB_Event_RenderFrame, @RenderFrame())

;----- Découpe chaque caractère dans un Sprite
For j=0 To 45
    LoadSprite(1000+j,"Demo2018/PoliceWar/PoliceWar"+Str(j)+".png",#PB_Sprite_AlphaBlending)
Next
    
    LoadSound(0,"Demo2018/PB1.mp3")
FlipBuffers()

Only PureBasic makes it possible
Avatar de l’utilisateur
djes
Messages : 4252
Inscription : ven. 11/févr./2005 17:34
Localisation : Arras, France

Re: SB : Barre de chargement de fichiers

Message par djes »

Sympa :)
Avatar de l’utilisateur
Cool Dji
Messages : 1126
Inscription : ven. 05/sept./2008 11:42
Localisation : Besançon
Contact :

Re: SB : Barre de chargement de fichiers

Message par Cool Dji »

Héhé,

Petit :wink: à Luke et Han en appuyant sur la barre espace (Only sur la version en ligne) !
Only PureBasic makes it possible
Avatar de l’utilisateur
Ar-S
Messages : 9472
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: SB : Barre de chargement de fichiers

Message par Ar-S »

Tu ne devrais pas mettre les pourcentages dans ce genre de loading. Via ma connexion, tout se charge relativement vite puis à 98% ça rame un peu (surement le fichier son plus lourd que ces copains ?).
Dans ce type de chargement, il est soit préférable de faire une anim en boucle, soit d'afficher cette barre mais avec le nom des fichiers en plus, que l'on sache ce qui se passe.
Sinon ça marche bien :D
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Avatar de l’utilisateur
Cool Dji
Messages : 1126
Inscription : ven. 05/sept./2008 11:42
Localisation : Besançon
Contact :

Re: SB : Barre de chargement de fichiers

Message par Cool Dji »

Hello Ar-S,

Yep, t'as raison, on a l'impression que ça ne va jamais dépasser le 98%.
Je vais chercher autre chose ;)
Only PureBasic makes it possible
Répondre