24 avr
2007
Bonjour,
aujourd'hui je vais vour parler un peu des palettes et de palib, en tous cas, de la partie code. La partie graphique, ca sera MasterDjé, car moi, j'y connais rien 
Si vous avez suivi le day 4 de palib http://www.palib.info/wikifr/doku.php?id=day4 , vous aurez appris qu'on peut utiliser 16 palettes par écran en mode 256 couleurs. Ces palettes sont numérotées de 0 à 15 et sont fonction d'un écran.
Vous l'avez sans doute compris, mon but ici est de simplifier l'utilisation de ces numéros pour un sprite donné.
Dans le cadre d'un homebrew, il devient compliqué de savoir quel numéro de palette correspond à quel numéro de sprite, et si je veux en créer un autre ? ma palette est-elle déjà chargée ? et quel est son numéro ?
Bref, tout cela, je veux pas m'en préoccuper.
J'ai donc créé une classe, dont l'essentiel des méthodes est static. Mon but est d'utiliser une chaine de caractères pour identifier une palette et de m'affranchir de son chargement (avec PA_LoadSpritePal). Je veux aussi que cette classe m'attribue un numéro de palette automatiquement et sache faire la corrélation synallagmatique entre son numéro et son nom.
Voici donc la classe GestionnairePalette. Elle utilise plusieurs vectors STL static pour connaitre les éléments internes qui la composent.
Voilà comment créer une nouvelle palette :
Je charge donc la palette Palette1_Pal (elle est de type const unsigned short *, comme produit en résultat pagfx) pour l'écran du bas, et je lui donne le nom "PAL_PIONS".
Sprite * pionRouge = new Sprite(ECRAN_DU_BAS, GestionnairePalette::getPaletteFromName(ECRAN_DU_BAS, "PAL_PIONS" ), pion_rouge_Sprite, OBJ_SIZE_64X64);
Maintenant, il me reste à créer mon sprite et pour l'associer à ma palette préalablement chargée, je vais utiliser la méthode getPaletteFromName :
GestionnairePalette::add(ECRAN_DU_BAS, palette_pions_Pal,"PAL_PIONS");
Voila, simple non ?
Pour l'instant, la classe est très light, elle possède une méthode supplémentaire qui décharge toutes les palettes : removeAll(). J'envisage, dès que j'en aurai besoin, de permettre de décharger une palette par son nom. Et si je vois d'autres choses à rajouter, je le ferais.
Je vous propose l'exemple suivant, qui va charger 2 sprites (des pions) qui possèdent la meme palette et un autre sprite (un logo) qui utilise une palette différente, puis je les affiche à l'écran. Voila comment faire :
// on ajoute la palette des pions
/*Important : PAGFX ajoute le suffixe _Pal au noms de fichiers de palette... méfiance :) */
GestionnairePalette::add(ECRAN_DU_BAS, palette_pions_Pal,"PAL_PIONS");
// on crée les deux sprites
/*Important : PAGFX ajoute le suffixe _Sprite au noms de fichiers de sprites... méfiance :) */
Sprite * pionRouge = new Sprite(ECRAN_DU_BAS, GestionnairePalette::getPaletteFromName(ECRAN_DU_BAS, "PAL_PIONS" ), pion_rouge_Sprite, OBJ_SIZE_64X64);
Sprite * pionVert = new Sprite(ECRAN_DU_BAS, GestionnairePalette::getPaletteFromName(ECRAN_DU_BAS, "PAL_PIONS" ), pion_vert_Sprite, OBJ_SIZE_64X64);
// on ajoute la palette du logo
GestionnairePalette::add(ECRAN_DU_BAS, palette_logo_Pal,"PAL_LOGO");
// on crée le sprite du logo
Sprite * spriteLogo = new Sprite(ECRAN_DU_BAS, GestionnairePalette::getPaletteFromName(ECRAN_DU_BAS, "PAL_LOGO" ), logo_vp_Sprite, OBJ_SIZE_64X64);
while(1) // Infinite loops
{
pionRouge->afficheSprite(10, 10);
pionVert->afficheSprite(80, 10);
spriteLogo->afficheSprite(40, 100);
PA_CheckLid();
PA_WaitForVBL();
}
Vous pourrez retrouver l'exemple complet en pièces jointes : DemoPalettes.rar
Bonne prog,
Nico
DSDS DevDev C++C++

24/04/2007 à 13:47:02 Dernière modif. : 24/04/2007 à 23:38:22