{{htmlmetatags>metatag-robots=() metatag-title=(Scriviamo il programma! - MCTILE tutorial) metatag-keywords=(Tutorial,C,library,Midres,MCTILE,Tiles,Commodore 64,Commodore VIC20,Commodore 16,Atari) metatag-description=(Arriviamo a spiegare il codice!) metatag-media-og:image=(:mctiles_tutorial_03d.png) metatag-og:title=(Scriviamo il programma!- MCTILE tutorial) metatag-og:description=(Arriviamo a spiegare il codice!) }} ====== TUTORIAL: MULTICOLOR TILE ====== ===== SCRIVIAMO IL PROGRAMMA! ===== Arriviamo ora al codice, da inserire nel file ''tutorial_ctile.c'': #include "midres.h" Il primo file da includere è proprio ''midres.h'', che contiene tutte le definizioni necessarie per usare i metodi e le strutture dati della libreria, e dei vari ambienti target. Ad esempio, contiene le definizioni dei colori utilizzate da ''[[:it:img2tile]]'' che sono differenziate in base al computer di riferimento. #include "tutorial_mctile.h" Il secondo file da includere è ''tutorial_mctile.h'', il cui contenuto è stato generato da ''[[:it:img2tile]]'' e che abbiamo già descritto [[:it:midres_library:tutorial:mctile:generating_tiles|in questa pagina]]. #define TILE_GHOST_MOVING TILE_START + TILE_COUNT + 1 Per poter gestire il movimento fluido di un tile multicolore è necessario generare tutti i "fotogrammi" intermedi di tale movimento. Questo richiede, tuttavia, di poter disporre di uno spazio libero. Il primo spazio libero si trova proprio dopo l'ultimo tile definito, ovvero ''TILE_START+TILE_COUNT + 1'' void main() { Da qui inizia il programma vero e proprio. mr_tile_position x = 0; Posizioniamo il fantasmino alla prima posizione dello schermo. Usiamo il tipo ''mr_tile_position'' perché è in grado di rappresentare una posizione che va da -32768 a +32768 e quindi è in grado di gestire le risoluzioni a larghezza più diffuse, come 320 pixel. mr_init_multicolor(); Ora inizializziamo il sottosistema grafico, indicando la preferenza per un sistema multicolore. Attenzione, però: se in fase di compilazione scegliete un target che non supporta questo tipo di grafica, **il sistema passerà automaticamente alla modalità monocolore**. mr_clear_bitmap(MR_SCREEN_DEFAULT); Cancelliamo lo schermo di default. mr_tile_setcolor(MR_TILE_BACKGROUND, TILE_COLOR0); mr_tile_setcolor(MR_TILE_COLOR0, TILE_COLOR1); mr_tile_setcolor(MR_TILE_COLOR1, TILE_COLOR2); mr_tile_setcolor(MR_TILE_COLOR2, TILE_COLOR3); Ora possiamo impostare i colori che ci sono stati comunicati da ''[[:it:img2tile]]''. Questo passo è necessario in quanto per ogni tile multicolor alcuni colori sono condivisi e altri sono in comune. mr_tileset_load("mctile.bin", MR_TILESET_0, TILE_START, TILE_COUNT); Carichiamo ora i tile generati da ''[[:it:img2tile]]''. Notare che il nome del file è stato abbreviato: questo si è reso necessario da limite che hanno molti filesystem di computer a 8 bit. mr_tile_prepare_horizontal_extended(MR_TILESET_0, TILE_GHOST, TILE_GHOST_WIDTH, TILE_GHOST_HEIGHT, TILE_GHOST_MOVING); Questa funzione prepara (ovvero: precalcola) tutti i fotogrammi intermedi per il fantasmino. Per poterla richiamare è necessario indicare su quale tileset si sta operando, il numero del macrotile, le dimensioni (in tile) e, infine, la posizione da cui iniziare per salvare i tile così ricalcolati. Da questo momento in poi sarà possibile usare ''TILE_GHOST_MOVING'' al posto del macrotile originale, al fine di ottenere un movimento fluido. mr_tileset_visible(MR_TILESET_0); \adsense\ Rendiamo attivi i tile ridisegnati. while (1) { mr_start_frame(); Eseguiamo ora un loop infinito e, all'ingresso del loop, segnaliamo che stiamo iniziando a disegnare un frame. ++x; mr_tile_moveto_horizontal_extended(MR_SCREEN_DEFAULT, x, MR_SCREEN_HEIGHT >> 1, TILE_GHOST_MOVING, TILE_GHOST_WIDTH, TILE_GHOST_HEIGHT, MR_COLOR_LIGHT_BLUE); Ad ogni giro spostiamo il fantasmino a destra di un pixel. Richiamando la funzione ''mr_tile_moveto_horizontal_extended'' stiamo, in realtà, ridisegnando ''TILE_GHOST_MOVING'' orizzontalmente ogni volta. Il simbolo ''MR_SCREEN_HEIGHT'' viene valorizzato al numero di tile per colonna. Ne consegue che disegniamo il fantasmino a partire dalla posizione ''x'' appena ricalcolata, e a metà altezza dello schermo. L'ultimo parametro è il colore ma, come abbiamo spiegato poco sopra, non è detto che sia il colore utilizzato per disegnare il tile. Diciamo che è un suggerimento laddove l'impostazione dei colori fosse insufficiente. if ((x >> MR_TILE_WIDTH_FACTOR) > MR_SCREEN_WIDTH) { x = -TILE_GHOST_WIDTH*MR_TILE_WIDTH_IN_PIXEL; } Questo controllo serve a far sì che il fantasmino, una volta uscito dalla parte destra dello schermo, rientri dalla parte sinistra. Calcoliamo il limite usando il parametro ''MR_TILE_WIDTH_FACTOR'', che dipende dalla risoluzione. L'ascissa viene messa pari alla larghezza del macrotile, di modo da avere come effetto un'entrata "a comparsa" da sinistra. mr_end_frame(4); Al termine segnaliamo che il fotogramma si è concluso. Il numero ''4'' sta ad indicare che, se sono passati meno di 4/60-esimi di secondo, il sistema dovrà aspettare quel tempo prima di ricominciare a disegnare. In questo modo, la velocità di disegno sarà identica a prescindere dalla piattaforma utilizzata. [[:it:midres_library:tutorials|Ritorna ai tutorial]]