Plus haut je parle de couleur, c'est un raccourci ! il s'agit des composantes rouge, verte et bleue d'une couleur.
ça marche pareil en changeant l'ordre d'écriture , le décalage ne change pas lui.
Couleur = R | G << 8 | B << 16
Couleur = B << 16 | G << 8 | R
Pour une couleur 24 bits (soit 3 octets)
La composante rouge occupe le premier octet (donc pas de décalage)
La composante verte occupe le second octet (décalage de 8 bits, soit un octet)
La composante bleue occupe le troisième octet (décalage de 16 bits, soit 2 octets)
Code : Tout sélectionner
R = 123
G = 45
B = 156
Couleur = R | G << 8 | B << 16
Debug RGB(R, G, B)
Debug Couleur
ça peut aussi servir dans les jeux, tu veux limiter la taille mémoire occuper par tes personnages et quand même stocker un max d'infos dans une variable. Tu peux décider d'affecter à chaque bit de ta variable un état ou une action. (ou faire un codage binaire sur un octet, affecter des bits d'états sur un autre octet, etc, et ensuite tu déchiffres le tout en faisant de la manipulation de bits, des décalages, des masques (avec un &)
Par exemple
Contenu des objets :
Bit 0 = Gourde
Bit 1 = Corde
Bit 2 = Autre chose
Bit 3 = Etc
Une seule variable ContenuDeMonSacADos permet de stocker plein d'infos, ça peut être pratique pour limiter la taille des datas à envoyer sur le net dans un jeu en réseau.
Code : Tout sélectionner
#Gourde = 1 << 0
#Corde = 1 << 1
#Autre = 1 << 2
#Etc = 1 << 3
Procedure Test(Test, texte$)
If Test
Debug "Chouette j'ai ça --> " + texte$
Else
Debug "Dommage, je n'ai pas ça --> " + texte$
EndIf
EndProcedure
;Exemple d'utilisation avec un long (4 octets)
ContenuDeMonSacADos.l = 0
; A chaque fois que tu prends un objet
ContenuDeMonSacADos | #Corde
ContenuDeMonSacADos | #Autre
; Pour tester si tu as une corde
Test(ContenuDeMonSacADos & #Corde, "Corde")
;Pour déposer une corde
ContenuDeMonSacADos & ~(#Corde)
Test(ContenuDeMonSacADos & #Corde, "Corde")
; Pour tester si tu as une gourde
Test(ContenuDeMonSacADos & #Gourde, "Gourde")
;Tu peux aussi décider que le second octet sera un compteur de vie
Vie = 3
ContenuDeMonSacADos | Vie << 8 ; Décalage de 8 bits pour stocker vie dans le deuxième octet
;Pour décrémenter d'une vie
;On récupère uniquement le 2ème octet avec un masque,
;puis on décale dans le sens inverse, et on décrémente la vie
Vie = ((ContenuDeMonSacADos & $0F00) >> 8) - 1 ;
Debug Vie