Buongiorno,
volevo chiedere qualche consiglio o trucco per render più fluido il movimento della mappa.

In un piccolo gioco 2d programmato con allegro, per testare la mappa, quando premo la freccia a destra, sposto la mappa a sinistra di 10px.

Descrivo come è strutturata la stampa della mappa:

la mappa è un insieme di tile. I numeri identificativi di ogni tile(con il quale verrà stampato a video un certo quadratino di un'immagine grande) sono memorizzati in una matrice fatta coi vector (vector<vector<int>>mappa). Con un doppio ciclo di for scansiono ogni elemento della matrice e ottengo il quadratino che devo disegnare a schermo e poi lo disegno. Ecco il codice:

codice:
for (int i = 0; i < row; i++)
	{
		for (int j = 0; j < col; j++)
		{
			
			if (mappa[i][j] != (mappa[i][j] / s_col) * s_col)
			{
				sy = (mappa[i][j] / s_col) * TILE;
				sx = ((mappa[i][j] - (s_col * (sy / TILE))) - 1) * TILE;
				al_draw_bitmap_region(mappa_1, sx, sy, TILE, TILE, j * TILE - x_scroll , i * TILE + y_scroll, NULL);
			}

                       else
                        {
                                 //algoritmo per i multipli del numero massimo di colonne
                         }
		}
	}
}
ok, stendiamo un velo pietoso sull'algoritmo luuunghissimo e decisamente da ottimizzare con cui ottengo le coordinate sx e sy di ogni tile nell'immagine.

La funzione al_draw_bitmap_region() serve per disegnare una determinata regione di immagine a schermo (per vedere i parametri cercare su google al_draw_bitmap_region allegro5).

I parametri j * TILE - x_scroll e i * TILE - y_scroll consistono nelle coordinate dove ogni tile verrà posizionato a schermo.

j e i sono gli indici del ciclo for

TILE è una costante (32) che indica quanto è grande il tile

x_scroll e y_scroll sono gli indici che mi servono per spostare l'immagine.

Infatti per spostare l'immagine incremento di 10 la variabile x_scroll e così ogni tile si "sposterà" di 10 px a sinistra.

infine con
codice:
al_clear_to_color(al_map_rgb(0, 0, 0));
al_flip_display();
pulisco lo schermo e scambio i buffer(cosa molto comoda aggiunta in allegro 5, in quanto in allegro 4 bisognava farsi una funzione propria per scambiare i buffer...).

Il codice "grottesco" funziona alla perfezione, tranne il fatto che lo spostamento non è per niente fluido, ma spezzettato. Qualche consiglio per ovviare a questo problema?


Grazie in anticipo.

Ciao