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