PDA

Voir la version complète : [GBA][Aide] Mode0 + OAM Memory Exceed


Swell
04/04/2006, 20h54
Bonjour,

Voila mon nouveau probleme sur la gameboy,

Pour tester le mode0, j'ai charge un fond d'ecran sur bg0 pas de pb
Sur BG1, j'ai un sprite qui fait 64x64 je le charge une fois, pas de pb
Si je le charge 8 fois, toujours pas de pb
A le 9eme fois, j'ai ce message d'erreur OAM Memory Exceed

Qu'est ce qui peut provoquer cette erreur?
Je n'ai pas depasse les 128 sprites...

Voila en gros le code que j'ai ecris:

ham_CreateObj((void*)grid18_Bitmap,
0,3,OBJ_MODE_NORMAL,1,0,0,0,0,0,0,
5,5);
ham_CreateObj((void*)grid18_Bitmap,
0,3,OBJ_MODE_NORMAL,1,0,0,0,0,0,0,
56,5);
ham_CreateObj((void*)grid18_Bitmap,
0,3,OBJ_MODE_NORMAL,1,0,0,0,0,0,0,
107,5);
ham_CreateObj((void*)grid18_Bitmap,
0,3,OBJ_MODE_NORMAL,1,0,0,0,0,0,0,
5,56);
ham_CreateObj((void*)grid18_Bitmap,
0,3,OBJ_MODE_NORMAL,1,0,0,0,0,0,0,
56,56);
ham_CreateObj((void*)grid18_Bitmap,
0,3,OBJ_MODE_NORMAL,1,0,0,0,0,0,0,
107,56);
ham_CreateObj((void*)grid18_Bitmap,
0,3,OBJ_MODE_NORMAL,1,0,0,0,0,0,0,
5,107);
ham_CreateObj((void*)grid18_Bitmap,
0,3,OBJ_MODE_NORMAL,1,0,0,0,0,0,0,
56,107);
ham_CreateObj((void*)grid18_Bitmap,
0,3,OBJ_MODE_NORMAL,1,0,0,0,0,0,0,
107,107);

C'est tres sale, mais c'est juste pour faire des tests...

Merci pour votre aide!

Dr.Vince
05/04/2006, 11h48
je connais pas trop les tailles mémoires, mais tu as surement dû dépasser
balance la rom avec 8 sprites histoire que je regarde, ou alors tu peux regarder toi même le contenu de l'OAM et des tiles avec VBA

mais quel est ton besoin ?? car si les sprites doivent être les mêmes tu peux charger les GFX une seule fois et ensuite utiliser les mêmes

Yodajr
05/04/2006, 12h17
Oui, la limite de 128 sprites n'est pas la seule, la mémoire OAM n'est pas infinie, si tu charge beaucoup de gros sprites, tu risque de la remplir plus vite. (Meme si 9 sprites, même 64x64, c'est pas beaucoup :-* )

Swell
12/04/2006, 15h28
je connais pas trop les tailles mémoires, mais tu as surement dû dépasser
balance la rom avec 8 sprites histoire que je regarde, ou alors tu peux regarder toi même le contenu de l'OAM et des tiles avec VBA

mais quel est ton besoin ?? car si les sprites doivent être les mêmes tu peux charger les GFX une seule fois et ensuite utiliser les mêmes

Merci à tous les deux pour vos réponses! :D

J'utilise hamlib pour charger et afficher les sprites, comment peut on charger les GFX une fois et les dupliquers pour les afficher à differents endroits?

Merci beaucoup

Dr.Vince
12/04/2006, 17h53
tout est clairement indiqué dans la doc de HAM :


u16 ham_CreateObjGfx (void *src, u16 obj_shape, u16 obj_size, u16 col_mode)
advanced: create new sprite GFX in OBJ memory for later use


tu récupère le u16, qui est en fait le numéro d'un slot de gfx en mémoire que tu utilises ensuite avec la fonction :


u8 ham_CreateObjFromGfxSlot (u16 slot, u16 obj_shape, u16 obj_size, u16 obj_mode, u16 col_mode, u16 pal_no,u16 mosaic, u16 hflip, u16 vflip, u16 prio, u16 dbl_size, u16 x, u16 y)
advanced: create a new OBJ from Existing GFX slot

Swell
12/04/2006, 20h21
tout est clairement indiqué dans la doc de HAM :


u16 ham_CreateObjGfx (void *src, u16 obj_shape, u16 obj_size, u16 col_mode)
advanced: create new sprite GFX in OBJ memory for later use


tu récupère le u16, qui est en fait le numéro d'un slot de gfx en mémoire que tu utilises ensuite avec la fonction :


u8 ham_CreateObjFromGfxSlot (u16 slot, u16 obj_shape, u16 obj_size, u16 obj_mode, u16 col_mode, u16 pal_no,u16 mosaic, u16 hflip, u16 vflip, u16 prio, u16 dbl_size, u16 x, u16 y)
advanced: create a new OBJ from Existing GFX slot


Parfait!
Merci beaucoup!!! :thumb_yel