{{htmlmetatags>metatag-robots=()
metatag-title=(Animazioni con i tile)
metatag-keywords=(Film,Animazioni,Commodore 64,Commodore VIC20,Commodore 16)
metatag-description=(Una breve guida suli permessi, animations by using tiling and midres.)
metatag-media-og:image=(midres02.jpg)
metatag-og:title=(Animazioni con i tile)
metatag-og:description=(A short guide on allowed animations by using tiling and midres.)
}}
====== ANIMAZIONI CON I TILES ======
===== ANIMAZIONI "SUL POSTO" =====
L'animazione sul posto consiste nel considerare il tile come il fotogramma di un oggetto grafico che cambi nel tempo. La successione di tali fotogrammi, alla giusta velocità, darà l'illusione di una animazione.
{{ ::tiling_animation.png?nolink&600 |}}
La modifica del tile può avvenire a runtime (**animazione sul posto in real time**) oppure precalcolando i tile che compongono l'animazione (**animazione sul posto precalcolata**).
Il vantaggio del primo approccio è che non si occupano spazi nell'area speciale; tuttavia, l'aggiornamento del fotogramma richiederà potenza di calcolo e non potrà essere troppo complesso.
{{ ::tiling_animation_real_time.png?nolink&600 |}}
Un esempio di questo approccio è uno scorrimento ondulatorio verticale di 1 pixel, a simulare un'onda. Dato un tile di 8x8 pixel, lo scrolling è una operazioneche richiede 6 o 7 cicli di copia e la cancellazione di un byte.
Il vantaggio del secondo approccio è la velocità e che non vi sono limiti alla complessità dell'operazione; di contro, richiede l'allocazione preventiva di tutti i fotogrammi, che sottrae spazio all'area dedicata. Un esempio di questo approccio è il girare di una ruota, disegnata a mano libera, sul proprio asse, che richiede non meno di 8 fotogrammi e che non è possibile fare in real time a causa della natura delle operazioni matematiche sottese a una rotazione.
===== ANIMAZIONE "SUL POSTO" CON PIU' TILE =====
{{ ::tiling_animation_complex.png?nolink&600 |}}
Nel caso l'oggetto da animare sia composto da più tile, cioè sia un vero e proprio tile set, l'approccio del calcolo in tempo reale è ancora meno percorribile a causa dell'incremento dei costi computazionali dell'aggiornamento. In tali casi si preferisce disegnare i fotogrammi che compongono l'animazione, trasformarli in tile e considerare ogni tile che compone l'oggetto grafico come una animazione indipendente.
{{ ::tiling_animation_complex_with_simple.png?nolink&600 |}}
Disponendo degli opportuni software, sarà peraltro possibile risparmiare dello spazio rilevando eventuali identità tra tile in posizioni diverse, che consentiranno l'ottimizzazione nel numero di tile necessari.
===== SPOSTAMENTI =====
Lo spostamento di un tile può avvenire in due modalità: in modo discreto oppure in modo fluido. La differenza tra le due modalità sta nel fatto che il movimento discreto è "a scatti" perché il tile viene spostato nella casella immediatamente vicina (orizzontalmente o verticalmente) mentre il movimento fluido garantisce uno spostamento di un singolo pixel nella medesima direzione.
{{ :tiling_movements.png?nolink |}}
La modalità discreta non necessita di particolari spiegazioni, dato che si tratta dell'implementazione più semplice ovvero dello spostamento del solo indice relativo al tile di arrivo, lasciando vuoto quello di origine. Questo tipo di spostamenti fa coincidere l'oggetto grafico con il tile.
La modalità fluida è invece più complessa da implementare, perché l'hardware video non fornisce alcuna primitiva per effettuare questo tipo di spostamenti. Per emularla si dovranno quindi ridisegnare due tile: quello di origine dello spostamento e quello di arrivo dello spostamento. Questo implica che non vi è più corrispondenza diretta tra oggetto grafico e tile, dato che due tile partecipano a disegnarlo.
{{ ::tiling_movement_flud.png?nolink&600 |}}
Il ridisegno consiste nello scorrimento (a destra oppure in basso) di un pixel dal tile che rappresenta l'oggetto grafico, e nel riportare tale pixel nel tile di arrivo. Ripetendo queste operazioni ciclicamente fino a completare la larghezza di un tile, otteniamo un movimento pari a quello di un tile. Ripetendo l'intero processo più volte, otteniamo lo spostamento dell'oggetto grafico per distanze arbitrarie.
Sebbene quelle dello scorrimento siano operazioni semplici, il processore centrale nei retrocomputer è di solito troppo lento per poter effettuare questo tipo di operazioni in tempo reale su un gran numero di tile: ne conseguirebbe l'impossibilità di effettuare movimenti di numerosi tile.
Per garantire performance accettabili si rende quindi necessario precalcolare tutti i tile intermedi dello spostamento, trattandoli come tile derivati:
{{ :tiling_movement_fluid_exploded.png?nolink |}}
Nel caso più semplice in cui si voglia far scorrere un oggetto grafico delle dimensioni di un tile, se il tile è formato da una matrice di RxC pixel, lo spostamento orizzontale richiederà 2xR tile intermedi (R di "uscita" e R di "entrata") mentre quello verticale ne richiederà 2xC (C di "uscita" e C di "entrata").
Una volta calcolati i tile intermedi, l'algoritmo per il rendering dello spostamento dovrà selezionare, nell'ambito di tali tile precalcolati, i due che rappresentano la configurazione ottimale per la posizione istantanea dello spostamento, copiandoli nelle posizioni attese. Operazioni, queste, sicuramente più rapide.
===== SPOSTAMENTI DI PIU' TILE =====
In questo caso, si dovrà tenere conto del fatto che ciò che si vuol far spostare non è un singolo tile bensì un tile set.
Se il tile è formato da una matrice di RxC pixel e il tileset da un insieme di 2x3 tiles, lo spostamento orizzontale richiederà 2x2xR tile intermedi (R di "uscita" e R di "entrata" tra il primo e il secondo tile, altrettanti tra il secondo e il terzo) mentre quello verticale ne richiederà ben 3x2xC (C di "uscita" e C di "entrata" per ogni coppia di tile).