Guarda, in realtà è una stupidata, ed è una tecnica che va bene per qualsiasi gioco
Ora ti spiego.
Prima di tutto ti crei 2 bitmap identici.
Visto che l'amiga non è molto veloce nel disegnare la grafica, devi ridurre il più possibile le cose da disegnare a schermo ogni 50 secondi.
perciò come prima cosa disegni su tutti e 2 i bitmap quelle parti dello schermo del gioco che di sicuro non cambiano mai, come ad esempiol'area di gioco, la parte col prossimo pezzo, la scritta score etc etc.
Ti ho fatto un mockup con immagini prese da internet
una volta che hai i 2 bitmap uguali, mostri l'uno e disegni sull'altro
con questo codice
Buffer 0,16384
Buffer 1,16384
bm.b=0
---------------- loop ---------------
DisplayBitMap 0,bm,0,0
bm=1-bm
UnBuffer bm
Use BitMap bm
Gosub logica_del_gioco
Gosub disegna_qualcosa
------------- end loop -------------
Allora cosa succede, prima di tutto ti crei 2 buffer (rispettivamente lo zero e l'uno) dove il blitz andrà a salvare la parte del bitmap che andrai a coprire con quello che disegnerai, in modo poi da poter cancellare le modifice e tornare al bitmap originale .
Dopodichè ti crei una variabile bm che indica il bitmap che vuoi mostrare ( da notare che 1-bm oscilla tra 0 e 1 e quindi a turno ti mostra la bitmap 0 o 1)
nel loop:
al momento 0 :
- mostri la bitmap bm ( in questo caso la zero) -----> DisplayBitMap 0,bm,0,0
- cambi la bitmap sulla quale disegni -----> bm=1-bm (quindi sulla bitmap 1 )
- cancelli tutte le cose disegnate precedentemente nel buffer -------> UnBuffer bm (quindi sul buffer 1 anche se non abbiamo disegnato ancora niente perchè siamo al momento zero)
- usi la nuova bitmap (la 1 per disegnare ) -----> Use BitMap bm
- vai alla routine di logica e poi a quella di disegno
al momento 1 :
- mostri la bitmap bm ( ora è diventato uno ) -----> DisplayBitMap 0,bm,0,0
- cambi la bitmap sulla quale disegni -----> bm=1-bm (quindi ora sulla bitmap zero )
- cancelli tutte le cose disegnate precedentemente nel buffer -------> UnBuffer bm (quindi sul buffer 0 )
- usi la nuova bitmap (la zero per disegnare ) -----> Use BitMap bm
- vai alla routine di logica e poi a quella di disegno
al momento 2 :
- mostri la bitmap bm ( ora la zero ) -----> DisplayBitMap 0,bm,0,0
- cambi la bitmap sulla quale disegni -----> bm=1-bm (quindi ora sulla bitmap uno )
- cancelli tutte le cose disegnate precedentemente nel buffer -------> UnBuffer bm (quindi sul buffer 1 perchè poi ci andrai a disegnare e ti serve lo schermo pulito dalle mosse precedenti )
- usi la nuova bitmap (ora la uno per disegnare ) -----> Use BitMap bm
- vai alla routine di logica e poi a quella di disegno
e così all'infinito
in pratica, mentre mostri una schermata in quella nascosta prima cancelli le modifiche precedenti, poi ridisegni le modifiche attuali.
Edit: nell'immagine naturalmente la parte sinistra è quella che si vede a schermo, mentre la destra è la parte nascosta
spero di essermi spiegato abbastanza bene ^^', al massimo chiedi
Edit 2 : ci saranno poi altri problemi da risolvere + in là, perchè ad esempio i pezzi che cadono sul fondo, non dovresti ridisegnarli sempre, ma solo quelli in movimento
ma prima vedi se funziona il doublebuffer