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
Packer et tabeau structurer
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
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 <<<<<
; <<<<<<<<<<<<<<<<<<<<<<<<<<
Ce n'est peut être pas parfait mais ça le merite de fonctionner.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
ça m' a d'ailleur donné une idée... je vais faire quelques tests !
Merci beaucoup tu m'as décoincé !
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
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.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
lMerci pour ton coup de main.