131Fermer133
FadestLe 18/03/2008 à 10:42
L'extrait du cours que j'avais fait pour Revival consacré au gestionnaire de sprite :
Le Sprite engine – le gestionnaire de sprite

Pour rappel, un sprite est défini par une structure de 23 octets (le Sprite Control Block) et s’affiche par l’ordre DrawSprite(). Dans ce cours, nous allons examiner plus en détail certains paramètres du SCB.

La définition des différents bits de SPRCTL0 et SPRCTL1 a déjà été donnée dans le cours précédent. La gestion des collisions fera l’objet d’un cours prochain.
SCBX et SCBY servent à positionner le sprite au sein du monde virtuel.
SCBHS et SCBVS permettent de définir le zoom horizontal et vertical géré en hard par la console. La valeur décimale 256 ($100) correspond à 100%.
Deux autres fonctions hard du gestionnaire de sprites ne sont pas définies dans la librairie du kit BLL, il s’agit de stretch (qui déforme le sprite un peu à la manière du texte défilant dans les introductions des films Star Wars) et tilt. Pour pouvoir les utiliser, nous allons définir 2 nouvelles macros-fonctions à l’image de celles existantes pour SCBHS par exemple :
La valeur de stretch correspond aux octets 15 et 16 de la structure du sprite.
La valeur de tilt correspond aux octets 17 et 18 de la structure du sprite.
On définit donc les 2 fonctions de la manière suivante :
#define SCBSTRETCH(a) (*(uint *)((a)+15))
#define SCBTILT(a) (*(uint *)((a)+17))

Toutes ces fonctions sont définies par rapport au point d’action du sprite. Si dans un carré de 15x15, vous dessinez un cercle, le centre du cercle se trouvera donc aux coordonnées (8,8).
Il est dans ce cas plus simple de définir le point d’action du sprite en (8,8).
De cette manière, on positionne directement le centre du cercle à l’écran avec les coordonnées SCBX et SCBY. L’exemple dans le dessin ci-contre montre de quelle manière le zoom est affecté par la définition du point d’action.
[note maquette : inclure ici l’image action.gif si possible]
Le point d’action est défini par SPRPCK à la génération de l’objet sprite avec le paramètre –a.
Par exemple :
SPRPCK –t6 –S015015 –r001001 –a008008 –p0 cercle.bmp
définira le point d’action du sprite cercle aux coordonnées (8,8).
N’hésitez pas à faire des tests en particulier avec stretch et tilt qui permettent d’obtenir des effets étonnants en fonction du point d’action.

Il est également possible de redéfinir l’ordonnancement de la palette au niveau de chaque SCB. Par exemple, si la couleur 2 de la palette correspond au vert et la couleur 3 au rouge et que vous avez besoin de 2 sprites identique mais de couleurs différentes (vert et rouge), il suffit de créer 2 SCB avec un ordonnancement distinct de la palette.
Palette Lynx	0	1	2	3	4	5	6	7	8	9	A	B	C	D	E	F
Palette Sprite 1	0	1	2	3	4	5	6	7	8	9	A	B	C	D	E	F
Palette Sprite 2	0	1	3	2	4	5	6	7	8	9	A	B	C	D	E	F
La même couleur peut être utilisée plusieurs fois dans la redéfinition de la palette du sprite.
De plus, la couleur de transparence est la couleur 0 de la palette Lynx. Ainsi, vous pouvez donc facilement définir n’importe quelle partie d’un sprite en transparent.


Edit : comme ça, tu va pouvoir faire des tests avec le strecth et le tilt en bonus wink