| DocumentationRootretour à l'arborescence des catégories » Documentation techniqueEnsemble des informations pouvant être utiles au développement » Lynx docRestranscription de la documentation d'origine » Moteur de Sprite et de collisions » Structure des données d'un sprite «««« ( /^\ ) »»»» INFOS SUR LA CATEGORIE Créée le : 2009-09-20 17:00:00 Par : vince INFOS SUR LA PAGE Titre : Structure des données d'un sprite Sous Titre : Langue : FRA Source : http://www.monlynx.de/lynx/lynx6.html#_64 Auteur : vince Posté par : vince Structure des données d'un spriteLes données d'un sprite sont constituées d'un bloc de contrôle de sprite (SCB) et d'un bloc de données du sprite. Les SCB sont liés par des pointeurs dans l'ordre de dessin. Chaque SCB pointe aussi vers le bloc de données du sprite qui contient l'image en question. Plusieurs SCB peuvent pointer sur un même bloc de données de sprite. Chaque occurence d'un sprite à l'écran nécessite 1 SCB. Vu que tous les SCB et tous les blocs de données sont accédés via des pointeurs, ils peuvent par conséquent se trouver n'importe où en RAM. Ni les SCB ni les données de sprite peuvent être dans la ROM de Mikey 1) Bloc de contrôle de sprite Chaque SCB contient certains éléments dans un certain ordre comme attendu par le matériel. De plus, d'autres éléments pourront être ajoutés par le logiciel en fonction des besoin. Le matériel ne sera pas au courrant ni impacté par ces éléments additionnels. Cette liste propose l'identification et l'ordre des éléments nécessaires et de quelques uns des éléments additionnels. SCB en RAM (lié par ordre d'affichage) Les 8 octets de palette de stylos sont traités par le matériel comme un bloc de données séparé du groupe d'octets le précédant dans le SCB. Ca veut dire que l'aptitude au rechargement de certains de ces octets n'affecte pas la réutilisabilité de la palette de stylos. De plus, ça veut dire que quand certains octets ne sont pas rechargés, la longueur du SCB sera plus petite du nombre d'octet inutilisés. Si jamais je n'ai pas été clair, tant pis. 2) Format de stockage des données Toutes les données de sprites sont formatées. Le format consiste en une série de décalages et des données de l'image. Les données de l'image peuvent être totalement compactées, une combinaison de compactage et de données litérales ou des données exclusivement litérales. Le format est présenté ci dessous : Début des données du sprite----------------------- Paquet de données ordinaire
Paquet intégralement litéral (le nombre de pixel dépends du décalage, cf spec) (1,2,3,4) bits par pixel de données Direction du dessin Le dessin des sprites est effectué en un à 4 quadrants. L'ordre de Bon, j'ai finalement trouvé le bug qui fait qu'on doit mettre un octet à 0 à la fin de chaque ligne de données. Il s'agit en fait de deux bugs. J'en ai résolu un mais l'autre implique des impacts importants. Malheureusement je manque de temps, donc : Il y a un bug dans le matériel qui impose que le dernier bit représentatif d'un bloc de données à la fin d'une ligne ne soit pas dans le dernier bit d'un octet (bit 0). Ca veut dire que la création des blocs de données doit valider cette condition, et quand elle intervient il faut compléter le bloc par un octet remplit de 0. N'oubliez pas d'ajuster le décalage pour inclure ce complément. Comme ça ne surviendra que sur une ligne sur 8, ça ne justifie pas de me forcer à passer du temps à essayer de corriger ce bug, désolé. Un entête de bloc de donnée de "00000" est utilisé comme un détecteur supplémentaire de fin de ligne de donnée de sprite. C'est généralement utilisé en guise de complément pour le dernier octet d'une ligne de donnée mais on peut le trouver n'importe où dans la ligne de donnée, pas uniquement sur le dernier octet. Notez que ça doit normalement décoder un bloc compact de 1 pixel. Merci d'utiliser le format litéral quand un bloc d'un pixel est nécessaire pour le graphisme. De plus, cet entête spécifique est utilisé quand une ligne sans pixel est désirée. Vous devez alors utiliser un décalage de 2 avec un octet de donnée remplit de "0" vu qu'un offset de 1 changerait la direction du dessin. Oups, on dirait qu'il y a un bug, la vérité plus tard sur "00000" Dans un sprite exclusivement litéral, il n'y a pas de comptage du nombre de pixels. Les données source sont converties en pixel au fur et à mesure que les octets des lignes de sprite sont lus. Les bits qui pourraient rester à la fin du dernier octet seront dessinés. Le bloc de données spécial "00000" n'est pas reconnu dans un sprite exclusivement litéral. (Source : http://www.monlynx.de/lynx/lynx6.html#_64) «««« ( /^\ ) »»»» | ||||||||||||||||||||||||
-= DevLynx, un site par vince pour vous =- |