PDA

Voir la version complète : [GBA][Aide] Variables globales


kinski
13/02/2006, 11h13
Hello,
Je suis en train de passer aux niveaux suivants dans mon proejt WonderBoy et je me pose une question.
Comment définir des variables map/tiles/palette globales de facon a ce que je puisse appeler d'une maniere generale:

ham_LoadBGPal256 ((void*) palGlobale);
ham_bg[1].ti = ham_InitTileSet((void*)tilGlobale,SIZEOF_16BIT(til Globale),0,1);
Map0 = hel_MapInit(1, 128 , 32 , FALSE, &mapGlobale);
En affectant dynamiquement a chaque changement de niveau aux trois variables les bonnes données !

Au lieu de faire

if (level == 1)
{
ham_LoadBGPal256 ((void*) palL1);
ham_bg[1].ti = ham_InitTileSet((void*)tilL1,SIZEOF_16BIT(tilL1),0 ,1);
Map0 = hel_MapInit(1, 128 , 32 , FALSE, &mapL1);
}
else if (level == 2)

{
ham_LoadBGPal256 ((void*) palL2);
ham_bg[1].ti = ham_InitTileSet((void*)tilL2,SIZEOF_16BIT(tilL2),0 ,1);
Map0 = hel_MapInit(1, 128 , 32 , FALSE, &mapL2);
}
...


Vous sauriez me donner des pistes les gars?
Merci !

Dr.Vince
13/02/2006, 12h35
Bah tu as deux solutions :
- soit tu utilise trois tableaux, un pour les tiles, la map et la palette
- soit un tableau qui contient une structure qui contient les 3 données

tu déclare tout en void*, et tes tableau en const

genre pour le cas 1 :


const void* LEVEL_DATA_MAP[x] = { (void*)&mapL1,(void*)&mapL2,... };
const void* LEVEL_DATA_TILES[x] = { (void*)&tilL1,(void*)&tilL2,... };
.....


par contre, si je dis pas de connerie tu va devoir également stocker la taille de tes tiles -> SIZEOF_16BIT(tilesX)
sinon ça fonctionnera pas, donc un quatrième tableau

Moi je te conseille la deuxième solution qui est un peu mieux.

kinski
13/02/2006, 12h37
Dr.Vince, tu confirmes ce que je lisais a l'instant meme sur gbadev.org (http://forum.gbadev.org/viewtopic.php?t=4626) !

Merci !!!

kinski
13/02/2006, 12h48
const void* LEVEL_DATA_MAP[x] = { (void*)&mapL1,(void*)&mapL2,... };
const void* LEVEL_DATA_TILES[x] = { (void*)&tilL1,(void*)&tilL2,... };
.....


Excuse moi de revenir a la charge avec une question de nul en c, mais:
en ce cas est ce que je vais avoir une duplication en mémoire des tableaux originaux ? :-'

Alekmaul
13/02/2006, 12h54
Nan, ce sont des pointeurs, seules les adresses seront stockées.