letoulousain wrote:mais c'est ce que fait le programme:
1. Au préalable, je stocke les données de toutes les tiles de 32*32 pixels dans la variable xdatapf[]
2. La variable xaccd est incrémenté jusqu'à la valeur 17, et c'est là que je commande la lecture de la variable xdatapf[] à 16 reprises, dans la boucle for(compty=0 ; compty<16; compty++)
(16 tiles * 32 pixels = 512 de pixels de haut)
Bref, je ne rafraichis pas l'intégralité du tilemap, mais seulement 16 tiles.
Je prends ton code allégé (j'ai du mal avec ton indentation, ça aide pas à comprendre X'D) :
Code: Select all
while(1)
{
if (value & BUTTON_RIGHT)
{
if (xscrolla<607)
{
..
if (xaccd==17) // 1 à 16 donc si xaccd=17 alors xaccd = 1
{
..
if (sdroit<47)
{
...
for(compty=0 ; compty<16; compty++) // lignes
{
...
if (compti == 0)
VDP_clearTileMapRect(APLAN, comptx*4, compty*4-zxt, wt, ht);
else
VDP_fillTileMapRectInc(APLAN, TILE_ATTR_FULL(PAL1, 0, 0, 0, planA[compti]), comptx*4, compty*4-zxt, wt, ht);
...
}
Dans cette partie de code que j'ai isolé, on voit que dans un certains cas tu peux appeler 16 fois la méthode VDP_fillTileMapRectInc(...) avec les paramètres wt et ht qui définissent la taille du tilemap à modifier...
J'ai même aps réussi à bien savoir à combien ils pouvaient être à ce moment là :p
Mais globalement je trouve que le code est complexe et difficile à comprendre, faudrait que tu fasses un peu de nettoyage ! Je suis sur qu'il y a beaucoup de traitement inutile.