Скачать Flicker-Free Animation with Page-Flippng

07.05.1990
Скачать файл (7,42 Кб)




Some days ago, one of you asked for a solution to do fast
flicker-free animation in TurboPascal. I myself had the same
problem and circumvented it by a simple technique called
"page-flipping": nearly every graphic card has 2 independent
graphic pages, so it is possible to draw at one page while
showing the other. If the "background" page is finished, you just
"flip" the pages:  thus, at any time all actions take place in
the background and you get a smooth animation!  In TP, you choose
the visible page with "SetVisualPage" and the working page with
"SetActivePage". - Take the following program as an example: it
animates a hatched square, either with or without page-flipping
(adapt proc. "Initialize" if you have a Hercules instead of an
EGA/VGA).

The only thing to notice is that you have to store coordinates
for 2 cycles to be able to erase a sprite on the correct page.
There remains one last possibility of (minor) flicker: depending
on your PC's BIOS, it may happen that programs flip pages while
the cathode ray is in the midst of displaying data: in that case
you have to bypass BIOS and synchronize switching directly with
the "vertical retrace" (the moment while the cathode ray moves
back from the bottom-right to the upper-left corner). As a
time-critical task (the corresponding bit at port $3DA, Bitmask 8
(or $3BA, Bitmask 128 for HGC) toggles with 50Hz), you should do
that in assembler.

To all of you who hope to program an arcade game completely in
TP, be warned: TP is just to slow to do the job (try to animate
-say- 30 sprites at once)! Me too, I had to discover this (3
years ago) -and came out with a self-written TP-unit,
spritedesigner and a lot of integrated assembler stuff (for the
animation itself, background-saving, collision detection,
scrolling and that things).  I am planning to release this
package (as shareware) here in FRG very soon, so if you are
interested, watch out!