69 lines
3.5 KiB
Markdown
69 lines
3.5 KiB
Markdown
Chapter 44\
|
|
Split Screens Save the Page Flipped Day {#Heading1}
|
|
----------------------------------------
|
|
|
|
### 640x480 Page Flipped Animation in 64K...Almost {#Heading2}
|
|
|
|
Almost doesn't count, they say—at least in horseshoes and maybe a few
|
|
other things. This is especially true in digital circles, where if you
|
|
need 12 MB of hard disk to install something and you only have 10 MB
|
|
left (a situation that seems to be some sort of eternal law) you're
|
|
stuck.
|
|
|
|
And that's only infuriating until you dredge up the gumption to go in
|
|
there and free up some space. How would you feel if you were up against
|
|
an "almost-but-not-quite" kind of a wall that couldn't be breached by
|
|
freeing up something elsewhere? Suppose you were within a few KB of
|
|
implementing a wonderful VGA animation scheme that provided lots of
|
|
screen space, square pixels, smooth motion and more than adequate
|
|
speed—but all the memory you have is all there is? What would you do?
|
|
|
|
Scream a little. Or throw something that won't break easily. Then you
|
|
sit down and let your right brain do what it was designed to do. Sure
|
|
enough, there's a way, and in this chapter I'll explain how a little VGA
|
|
secret called *page splitting* can save the day for page flipped
|
|
animation in 640x480 mode. But to do that, I have to lay a little
|
|
groundwork first. Or maybe a lot of groundwork.
|
|
|
|
No horseshoes here.
|
|
|
|
#### A Plethora of Challenges {#Heading3}
|
|
|
|
In its simplest terms, computer animation consists of rapidly redrawing
|
|
similar images at slightly differing locations, so that the eye
|
|
interprets the successive images as a single object in motion over time.
|
|
The fact that the world is an analog realm and the images displayed on a
|
|
computer screen consist of discrete pixels updated at a maximum rate of
|
|
about 70 Hz is irrelevant; your eye can interpret both real-world images
|
|
and pixel patterns on the screen as objects in motion, and that's that.
|
|
|
|
One of the key problems of computer animation is that it takes time to
|
|
redraw a screen, time during which the bitmap controlling the screen is
|
|
in an intermediate state, with, quite possibly, many objects erased and
|
|
others half-drawn. Even when only briefly displayed, a partially-updated
|
|
screen can cause flicker at best, and at worst can destroy the illusion
|
|
of motion entirely.
|
|
|
|
Another problem of animation is that the screen must update often enough
|
|
so that motion appears continuous. A moving object that moves just once
|
|
every second, shifting by hundreds of pixels each time it does move,
|
|
will appear to jump, not to move smoothly. Therefore, there are two
|
|
overriding requirements for smooth animation: 1) the bitmap must be
|
|
updated quickly (once per frame—60 to 70 Hz—is ideal, although 30 Hz
|
|
will do fine), and, 2) the process of redrawing the screen must be
|
|
invisible to the user; only the end result should ever be seen. Both of
|
|
these requirements are met by the program presented in Listings 44.1 and
|
|
44.2.
|
|
|
|
#### A Page Flipping Animation Demonstration {#Heading4}
|
|
|
|
The listings taken together form a sample animation program, in which a
|
|
single object bounces endlessly off other objects, with instructions and
|
|
a count of bounces displayed at the bottom of the screen. I'll discuss
|
|
various aspects of Listings 44.1 and 44.2 during the balance of this
|
|
article. The listings are too complex and involve too much VGA and
|
|
animation knowledge for for me to discuss it all in exhaustive detail
|
|
(and I've covered a lot of this stuff earlier in the book); instead,
|
|
I'll cover the major elements, leaving it to you to explore the finer
|
|
points—and, hope, to experiment with and expand on the code I'll
|
|
provide.
|