Packer et tabeau structurer

Partagez votre expérience de PureBasic avec les autres utilisateurs.
Guimauve
Messages : 1015
Inscription : mer. 11/févr./2004 0:32
Localisation : Québec, Canada

Message par Guimauve »

Et bien c'est loin d'être l'idéal parce qu'on fait :

OpenPack()
CreateFile()
CloseFile()
OpenFile()
CloseFile()
DeleteFile()
ClosePack()

Mais bon étant donnée que la structure contient 1 chaîne de caractère on a pas vraiment le choix je pense.

A+
Guimauve
Guimauve
Messages : 1015
Inscription : mer. 11/févr./2004 0:32
Localisation : Québec, Canada

Message par Guimauve »

Une autre méthode, cette fois pour les structures sans chaine de caractère. Ce qui veut dire que si la chaine de caractère est remplacé par un tableau de Byte, 1 index par lettre (Code Ascii), de longueur fixe ça pourrait se faire aussi.

A+
Guimauve

Code : Tout sélectionner

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; CODE GÉNÉRÉ AUTOMATIQUEMENT, NE PAS MODIFIER À
; MOINS D'AVOIR UNE RAISON TRÈS TRÈS VALABLE !!!
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Déclaration de la Structure <<<<<

Structure Animation
   
   Sprite.w
   Delay.w
   dx.b
   dy.b
   Sound.w
   
EndStructure

; <<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Les mutateurs <<<<<

Macro SetAnimationSprite(AnimationA, P_Sprite)
   
   AnimationA\Sprite = P_Sprite
   
EndMacro

Macro SetAnimationDelay(AnimationA, P_Delay)
   
   AnimationA\Delay = P_Delay
   
EndMacro

Macro SetAnimationDx(AnimationA, P_Dx)
   
   AnimationA\dx = P_Dx
   
EndMacro

Macro SetAnimationDy(AnimationA, P_Dy)
   
   AnimationA\dy = P_Dy
   
EndMacro

Macro SetAnimationSound(AnimationA, P_Sound)
   
   AnimationA\Sound = P_Sound
   
EndMacro

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Les observateurs <<<<<

Macro GetAnimationSprite(AnimationA)
   
   AnimationA\Sprite
   
EndMacro

Macro GetAnimationDelay(AnimationA)
   
   AnimationA\Delay
   
EndMacro

Macro GetAnimationDx(AnimationA)
   
   AnimationA\dx
   
EndMacro

Macro GetAnimationDy(AnimationA)
   
   AnimationA\dy
   
EndMacro

Macro GetAnimationSound(AnimationA)
   
   AnimationA\Sound
   
EndMacro

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< L'opérateur Update <<<<<

Macro UpdateAnimation(AnimationA, P_Sprite, P_Delay, P_Dx, P_Dy, P_Sound)
   
   SetAnimationSprite(AnimationA, P_Sprite)
   SetAnimationDelay(AnimationA, P_Delay)
   SetAnimationDx(AnimationA, P_Dx)
   SetAnimationDy(AnimationA, P_Dy)
   SetAnimationSound(AnimationA, P_Sound)
   
EndMacro

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< L'opérateur Copy : A = Source : B = Destination <<<<<

Macro CopyAnimation(AnimationA, AnimationB)
   
   CopyMemory(AnimationA, AnimationB, SizeOf(Animation))
   
EndMacro

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Lecture fichier Binaire <<<<<

; Procedure ReadAnimation(FileID.l, *AnimationA.Animation)
   ; 
   ; SetAnimationSprite(*AnimationA, ReadWord(FileID))
   ; SetAnimationDelay(*AnimationA, ReadWord(FileID))
   ; SetAnimationDx(*AnimationA, ReadByte(FileID))
   ; SetAnimationDy(*AnimationA, ReadByte(FileID))
   ; SetAnimationSound(*AnimationA, ReadWord(FileID))
   ; 
; EndProcedure

Macro ReadAnimation(FileID, AnimationA)
   
   ReadData(FileID, AnimationA, SizeOf(Animation))
   
EndMacro

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Écriture fichier Binaire <<<<<

; Procedure WriteAnimation(FileID.l, *AnimationA.Animation)
   ; 
   ; WriteWord(FileID, GetAnimationSprite(*AnimationA))
   ; WriteWord(FileID, GetAnimationDelay(*AnimationA))
   ; WriteByte(FileID, GetAnimationDx(*AnimationA))
   ; WriteByte(FileID, GetAnimationDy(*AnimationA))
   ; WriteWord(FileID, GetAnimationSound(*AnimationA))
   ; 
; EndProcedure

Macro WriteAnimation(FileID, AnimationA)
   
   WriteData(FileID, AnimationA, SizeOf(Animation))
   
EndMacro

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Macro de déboguage <<<<<

Macro DebugAnimation(AnimationA)
   
   Debug GetAnimationSprite(AnimationA)
   Debug GetAnimationDelay(AnimationA)
   Debug GetAnimationDx(AnimationA)
   Debug GetAnimationDy(AnimationA)
   Debug GetAnimationSound(AnimationA)
   
EndMacro

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Code généré en : 00.047 secondes <<<<<
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< On crée un tableau d'animation <<<<<

Dim TableauAnim.Animation(3)
Dim TableauAnim2.Animation(3) ; Lui c'est pour le test de chargement seulement

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< On initalise le tableau d'animation <<<<<

UpdateAnimation(TableauAnim(0), 55, 1, 0, 25, 150)
UpdateAnimation(TableauAnim(1), 56, 5, 0, 26, 115)
UpdateAnimation(TableauAnim(2), 57, 3, 0, 27, 175)
UpdateAnimation(TableauAnim(3), 58, 2, 0, 28, 132)

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< On debug pour voir si l'initialisation à marché <<<<<

Debug "========================================="
Debug "Les données originales"
Debug ""

For Index = 0 To 3
   Debug "L'animation no. = " + Str(Index)
   DebugAnimation(TableauAnim(Index))
   Debug ""
Next

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Création du fichier pack <<<<<

If CreatePack("Animation.pack")
   
   For Index = 0 To 3
      
      If CreateFile(Index, "Animation_" + Str(Index) + ".data")
         
         WriteAnimation(Index, TableauAnim(Index))
         CloseFile(Index)
         
      EndIf 
      
      AddPackFile("Animation_" + Str(Index) + ".data", 9)
      
      ; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
      ; Le fichier *.data est dans le fichier *.pack 
      ; donc il n'est plus nécessaire et on le détruit.
      
      DeleteFile("Animation_" + Str(Index) + ".data")
      
   Next
   
   ClosePack()
   
EndIf

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Ouverture du fichier pack <<<<<

If OpenPack("Animation.pack")
   
   For Index = 0 To 3
      
      Memory = NextPackFile()
      
      If Memory
         CopyAnimation(Memory, TableauAnim2(Index))
      EndIf 
      
   Next
   
   ClosePack()
   
EndIf

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< On debug pour voir si la décompression à marché <<<<<

Debug "========================================="
Debug "Décompression du fichier pack"
Debug ""

For Index = 0 To 3
   Debug "L'animation no. = " + Str(Index)
   DebugAnimation(TableauAnim2(Index))
   Debug ""
Next

; <<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< FIN DU FICHIER <<<<<
; <<<<<<<<<<<<<<<<<<<<<<<<<<
Avatar de l’utilisateur
Thyphoon
Messages : 2706
Inscription : mer. 25/août/2004 6:31
Localisation : Eragny
Contact :

Message par Thyphoon »

Guimauve a écrit :Et bien c'est loin d'être l'idéal parce qu'on fait :

OpenPack()
CreateFile()
CloseFile()
OpenFile()
CloseFile()
DeleteFile()
ClosePack()

Mais bon étant donnée que la structure contient 1 chaîne de caractère on a pas vraiment le choix je pense.

A+
Guimauve
Ce n'est peut être pas parfait mais ça le merite de fonctionner.
ça m' a d'ailleur donné une idée... je vais faire quelques tests !
Merci beaucoup tu m'as décoincé !
Guimauve
Messages : 1015
Inscription : mer. 11/févr./2004 0:32
Localisation : Québec, Canada

Message par Guimauve »

Ce que je veux dire c'est que c'est pas très élégant comme code.
Mais pour fonctionner, ça oui aucun problème de ce coté.

Un petit rappel, on peut faire un CatchSprite(), CatchSound() ou
CatchImage() avec le pointeur retourné par la commande
NextPackFile(). Il est donc inutile de créer un fichier temporaire
pour l'obtenir.

A+
Guimauve
Avatar de l’utilisateur
Thyphoon
Messages : 2706
Inscription : mer. 25/août/2004 6:31
Localisation : Eragny
Contact :

Message par Thyphoon »

Guimauve a écrit :Ce que je veux dire c'est que c'est pas très élégant comme code.
Mais pour fonctionner, ça oui aucun problème de ce coté.

Un petit rappel, on peut faire un CatchSprite(), CatchSound() ou
CatchImage() avec le pointeur retourné par la commande
NextPackFile(). Il est donc inutile de créer un fichier temporaire
pour l'obtenir.

A+
Guimauve
Merci je conaissais pour CatchSprite etc... Mon problème était surtout de mettre dans le pack des données structurée de façon simple.
lMerci pour ton coup de main.
Répondre