Autore Topic: Effettuare Modifiche Allo Schermo  (Letto 2565 volte)

MarC=ello

  • Utente
  • **
  • Post: 337
  • Gioco Preferito: CBM BASIC 2.0
Effettuare Modifiche Allo Schermo
« il: 22 Maggio 2005, 21:47:08 »
 E' risaputo che utilizzando le interruzioni del raster è possibile effettuare delle modifiche allo schermo (ad esempio muovere degli sprite, effettuare uno scrolling, ecc... ecc...) senza avere i fastidiosi sfarfallii che diversamente si ottengono. Se infatti si vuole muovere un oggetto grafico nel video senza preoccuparsi del sincronismo col rasterbeam, si ottengono dei più o meno fastidiosi "flicker".

Al di là dell'uso delle interruzioni del raster, vi è un modo semplice semplice per essere sicuri che il rasterbeam si trovi al di fuori dell'area visibile dello schermo:

Codice: [Seleziona]
loop lda $d011
      bpl loop

Eseguita questa istruzione, è possibile muovere gli sprite o quant'altro, sicuri che in quel momento il rasterbeam è al di fuori dell'area visibile dello schermo.

Il problema però presente in questo metodo è questo: una volta effettuati i movimenti, potrebbe darsi che il raster si trovi ancora nell'area non visibile del video. Quindi, il test sopra darebbe come risultato: il rasterbeam si trova al di fuori dell'area visibile... e nello stesso frame verrebbe di nuovo effettuato il movimento! Ciò ha come risultato che in un frame p. es. lo sprite verrebbe mosso troppe volte. Quindi, una volta scritte le istruzioni relative al movimento, bisogna sincerarsi che il rasterbeam si riposizioni nell'area visibile del video:

Codice: [Seleziona]
loop2 lda $d011
       bmi loop2

Dunque, supponendo di voler muovere uno sprite di un pixel per ogni frame:

1 - attendi che il rasterbeam si trovi nell'area non visibile del video
2 - muovi lo sprite di un pixel
3 - attendi che il rasterbeam si trovi nell'area visibile del video
4 - riparti dal punto 1

Ricordo che mi ero incasinato in questa questione volendo fixare un intro di un'altra persona... avevo risolto con le IRQ, ma doveva esserci un sistema anche con il semplice "busy waiting" qui discusso!  ;)

In BASIC, di solito non c'è bisogno di fare il secondo controllo (cioè di assicurarsi che poi il rasterbeam si riposizioni nell'area visibile), data la lentezza dell'interpretazione. Basta dunque, in generale:

1- attendi che il rasterbeam si trovi nell'area non visibile del video
2- muovi lo sprite o quant'altro
3 - torna al punto 1

Il punto 1 si fa con l'istruzione:

WAIT 53265,128

come spiegato nel capitolo 3 della mia revisione della Guida di Rif. del C64

Ciao!
 
-=MarC=ellO=-