afficher une sucession d'images

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Avatar de l’utilisateur
raven
Messages : 222
Inscription : jeu. 06/janv./2005 15:45

afficher une sucession d'images

Message par raven »

bonjour à tous,

voilà,je cherche à afficher une succession d'image(animation) d'un fichier que j'ai packer.

je voudrait le charger,puis l'afficher dans un openscreen.

j'avais fait ceci à une époque qui fonctionnait avec Pb 3.94:

Code : Tout sélectionner

;/animation
openscreen..............

OpenPack("raven.pack")

CatchSprite(000,NextPackFile()) 
CatchSprite(001,NextPackFile()) 
CatchSprite(002,NextPackFile())
CatchSprite(003,NextPackFile())  
CatchSprite(004,NextPackFile()) 
CatchSprite(005,NextPackFile()) 
CatchSprite(006,NextPackFile()) 

temps_anim = 0
image = 000
image = 001
image = 002
image = 003
image = 004
image = 005
image = 006

repeat
clearscreen....
;/animation
If Temp >.... And Temp <........
DisplaySprite(image,x100,y100)

temps_anim +1 
If temps_anim > 0
  image = 000
EndIf
If temps_anim > 20
  image = 001
EndIf
If temps_anim > 30
  image = 002
EndIf
If temps_anim > 40
  image = 003
EndIf
If temps_anim > 50
  image = 004
EndIf
If temps_anim > 60
  image = 005
EndIf
If temps_anim > 70
  image = 006
EndIf

freesprite(000)
freesprite(001)
etc...
je cherche à faire un truc simple,juste ouvrir le pack,puis l'afficher.

je suis en Pb 5.23 lts.

merci pour votre aide :)
Pb5.24 Lts/5.31 Windows 7 64 nvidia 560 ti E8500 8g ram
Avatar de l’utilisateur
falsam
Messages : 7324
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: afficher une sucession d'images

Message par falsam »

Image

Petit code pour des images non packés. Libre à toi de décompresser les images dans un dossier (ici Assets) puis une fois les images dans un tableau, de supprimer ces images du disque.

■ La procédure GamePreload() Charge les images se trouvant dans un dossier (ici le dossier assets) sous la forme d'un tableau d'identifiant (Dim Images(0)).

■ La procédure GameUpdate() se charge d'afficher chaque image de ce tableau en tenant compte d'un intervalle de temps en milliseconde entre chaque image (FrameRate). Chaque image sera centrée horizontalement et verticalement.

Code : Tout sélectionner

Enumeration Window
  #MainForm
EndEnumeration

Enumeration Sprite
  #Image
EndEnumeration

Enumeration Files
  #Directory
EndEnumeration

Global Dim Images(0), Index=0
Global FrameTimeLife, FrameRate =  1000

Procedure GamePreload()
  Protected Directory.s = "assets"
  
  UseJPEGImageDecoder()
  UsePNGImageDecoder()
     
  If ExamineDirectory(#Directory, Directory, "*.*")  
    While NextDirectoryEntry(#Directory)
      If DirectoryEntryType(#Directory) = #PB_DirectoryEntry_File
        Images(Index) = LoadImage(#PB_Any, Directory +"/"+ DirectoryEntryName(#Directory))
        Index+1
        ReDim Images(Index)
      EndIf 
    Wend
    FinishDirectory(#Directory)
  EndIf
  
  CreateSprite(#Image, ScreenWidth(), ScreenHeight())
EndProcedure

Procedure GameUpdate() 
  If ElapsedMilliseconds() - FrameTimeLife > FrameRate  
    FrameTimeLife = ElapsedMilliseconds()
    
    Index + 1
    
    If Index > ArraySize(Images())-1
      Index = 0
    EndIf
  EndIf
  
  StartDrawing(SpriteOutput(#Image))
  Box(0, 0, ScreenWidth(), ScreenHeight(), RGB(128, 128, 128)) ;Background avant affichage
  DrawImage(ImageID(Images(Index)), (ScreenWidth()-ImageWidth(Images(Index)))/2, (ScreenHeight()-ImageHeight(Images(Index)))/2) ;Centrage de l'image
  StopDrawing()
  DisplaySprite(#Image, 0, 0)
  Delay(100)
EndProcedure

Procedure GameStart(Width=800, Height = 600)
  
  ;Initialisation de l'environnement 2D
  If InitSprite() = 0 Or InitKeyboard() = 0 Or InitMouse() = 0 And InitSound() = 0
    MessageRequester("Error", "Sprite system can't be initialized", 0)
    End
  EndIf
    
  If OpenWindow(#mainform, 0, 0, Width, Height, "Diaporama", #PB_Window_SystemMenu|#PB_Window_ScreenCentered)
    If OpenWindowedScreen(WindowID(#mainform), 0, 0, Width, Height)
      GamePreload()
    EndIf
  EndIf
  
  Repeat  
    Repeat
      Event = WindowEvent()
     
      Select event    
        Case #PB_Event_CloseWindow
          End
      EndSelect  
    Until event=0
    
    FlipBuffers()
    ClearScreen(RGB(0,0,0))
                
    ExamineKeyboard()
    ;ExamineMouse()
    GameUpdate()
  
  Until KeyboardPushed(#PB_Key_Escape)
EndProcedure

GameStart(580, 387)
:arrow: diaporama.zip (Images plus code)
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Avatar de l’utilisateur
raven
Messages : 222
Inscription : jeu. 06/janv./2005 15:45

Re: afficher une sucession d'images

Message par raven »

merci falsam pour l'exemple :)
je vais voir comment adapter tout ç'a dans mon code.
Pb5.24 Lts/5.31 Windows 7 64 nvidia 560 ti E8500 8g ram
Répondre