A présent, passons aux sprites.
Il faut toujours inclure :
Code : C
Code pour sprites standards
Tout d'abord, il faut charger la palette de sprites. On va utiliser cette fonction :
Code : C | void PA_LoadSpritePal(u8 ecran,u8 numero_palette,(void*)fichier_palette_cree_par_PAGfx);
|
Mais comment connaître Fichier_palette_cree_par_PAGfx ?
C'est simple, supposons que votre PAGfx.ini comporte :
Citation#TranspColor Magenta
#Sprites :
mario.PNG 256colors sprites
wario.PNG 256colors sprites
#Backgrounds :
Le troisième mot est la palette. Pour le code, il suffit de rajouter
_Pal.
Ce qui donne :
Code : C 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 | #include <PA9.h>
#include "all_gfx.h"
int main(int argc, char ** argv)
{
PA_Init();
PA_LoadSpritePal(0,0,(void*)sprites_Pal);
while(1)
{
PA_WaitForVBL();
}
return 0;
}
|
Et maintenant, on va créer le sprite avec
PA_CreateSprite :
Code : C | void PA_CreateSprite(u8 ecran,u8 numero_sprite,(void*)nom_sprite_cree_par_PAGfx,u8 forme,u8 taille,u8 mode_couleurs,u8 palette,s16 position_x,s16 position_y);
|
Pour obtenir Nom_sprite_cree_par_PAGfx, il faut regarder ça dans PAGfx.ini :
Citation#TranspColor Magenta
#Sprites :
mario.PNG 256colors sprites
wario.PNG 256colors sprites
#Backgrounds :
Il s'agit en fait du nom des images sans l'extension.
À ces noms, il faut rajouter
_Sprite.
Il y a plusieurs tailles différentes (variables
forme et
taille), voici la liste
complète :
- OBJ_SIZE_8X8 : pour un sprite de 8*8
- OBJ_SIZE_16X16
- OBJ_SIZE_32X32
- OBJ_SIZE_64X64
- OBJ_SIZE_16X8
- OBJ_SIZE_32X8
- OBJ_SIZE_32X16
- OBJ_SIZE_64X32
- OBJ_SIZE_8X16
- OBJ_SIZE_8X32
- OBJ_SIZE_16X32
- OBJ_SIZE_32X64
Les constantes OBJ_SIZE_[...]X[...] remplacent les arguments forme et taille. Vous n'avez donc plus 9 mais 8 arguments à fournir.
Et si mon image faisait 20*10 ? Il n'existe pas de constante adaptée...
Il suffit de prendre la constante qui est juste au-dessus de la valeur (hauteur ou largeur) la plus grande. Ici, 20 est la plus grande valeur, donc il faudra créer un sprite de 32*16, et les pixels qui ne seront pas utilisés (après 20 dans les x et après 10 dans les y) devront être de la couleur transparente définie dans PAGfx.ini.
Gnein ?
Bon, je vais faire une image :

C'est un rectangle de 20*10, qui doit être mis en 32*16 ou plus.
Et si une des valeurs de mon image dépassait 64 ?
Vous avez trois solutions :
- Réduire l'image en format 64*64 (en conservant le ratio largeur/hauteur, mais la qualité diminuera).
- Le transformer en arrière-plan (plus rare, mais possible).
- Mettre plusieurs sprites côte à côte contenant chacun un morceau de l'image et la reconstituant une fois regroupés (pas très conseillé car il n'y a que 128 sprites disponibles par écran).
Ensuite, mode_couleur peut prendre deux valeurs : soit 0 ; soit 1.
Mais comment on fait pour savoir s'il faut mettre 1 ou 0 ?
Il faut regarder :
Citation#TranspColor Magenta
#Sprites :
mario.PNG 256colors sprites
wario.PNG 256colors sprites
#Backgrounds :
Il faut mettre 1 pour 256 couleurs, et 0 pour 16 couleurs.
Palette est le numéro de la palette (définie plus haut).
Voici un code récapitulatif (avec notre rectangle

) :
Code : C 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 | #include <PA9.h>
#include "all_gfx.h"
int main(int argc, char ** argv)
{
PA_Init();
PA_LoadSpritePal(0,0,(void*)sprites_Pal);
PA_CreateSprite(0,0,(void*)rectangle_Sprite,OBJ_SIZE_32X16,1,0,0,0);
/* On crée un sprite sur l'écran tactile (0), son numéro est 0, c'est un sprite semblable à rectangle.png
Vu qu'il fait 20*10, il faut le mettre en 32*16, 256 couleurs donc 1, utilise la palette 0, sa position dans
les X est 0, comme dans les y. */
while(1)
{
PA_WaitForVBL();
}
return 0;
}
|
On peut changer les coordonnées d'un sprite avec
PA_SetSpriteXY :
Code : C | void PA_SetSpriteXY(ecran,numero_sprite,position_x,position_y);
|
Voici un petit jeu :
Code : C 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 | #include <PA9.h>
#include "gfx/all_gfx.h"
int main(int argc, char ** argv)
{
int x=100,y=100;
PA_Init();
PA_LoadSpritePal(0,0,(void*)sprites_Pal);
PA_CreateSprite(0,0,(void*)rectangle_Sprite,OBJ_SIZE_32X16,1,0,0,0);
while(1)
{
PA_SetSpriteXY(0,0,x,y);
PA_WaitForVBL();
}
return 0;
}
|
Si vous devez gérer une IA, et que chaque élément contrôlé par ordinateur (ou par vous) est le même, vous pouvez utiliser la macro
PA_CloneSprite(ecran,numero_du_sprite_a_creer,numero_du_sprite_qui_va_etre_cloné)
pour cloner le sprite que vous voulez. Ainsi, si vous faites
PA_CloneSprite(0,1,0);
, vous créerez, dans l'écran 0, un clone du sprite 0 ayant pour numéro 1.
Vous pouvez aussi libérer la mémoire en détruisant des sprites qui ne servent plus à rien avec :
Code : C | void PA_DeleteSprite(u8 ecran,u8 numero_sprite);
|
Il ne peut y avoir que 128 sprites sur chaque écran, donc à vous de les utiliser à bon escient...