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.
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 <<<<<
; <<<<<<<<<<<<<<<<<<<<<<<<<<