From: scd@cs.brown.edu (Steven C. Dollins)
Subject: Re: PC Graphics (animation)
Organization: Dept. of Computer Science, Brown University
Date: Thu, 21 Jan 1993 22:51:36 GMT

In article <1993Jan21.082235.505680@zeus.calpoly.edu> ssenkere@zeus.calpoly.edu (Scott Senkeresty) writes:

   Our main question is how to move the paddles and ball.  We have tried the
   obvious.  Write over the current object in the background color, and redraw
   it at the new location.   Several problems occured...  Flickering,
   Jumpiness, and a slow down of things when the paddles move (ie ball moves
   quickly with no paddle movement, slower with 1 paddle movement, slowest with
   both). 

   What is the logical way of doing this!?  We think maybe we need to store the
   whole screen as a bitmap... manipulate our bitmap, and then somehow put it
   on the screen (notice the SOMEHOW, as in... beats us). 

   As long as we are at it... there is the problem of the typematic key rates,
   etc.  It would be nice to be able to press several keys at once, and have
   them be DOWN until let up... not repeating...   It is our understanding that
   this would require writing an Int-9 handler.  Any chance of just happening
   to come across some source code!?  :-)  

   Oh yes... I forgot something important...  As of now, we are using just C.
   We have experimented with Steven Dollins' mode x library as well.

   So... get us going in the right direction at least!  Please ?


If you are using my mode X library, set the mode using

	SetModeX(1);

to initialize it in double buffered mode.  In this mode, all graphics
calls write to the hidden page.  To see the changes, swap pages with

	SwapPage();

Piece of cake.  Storing the screen as a bitmap is not necessary (and
won't work with my library since I don't have support for bitmaps.)

On the other hand, XLIB came out after I stopped programming PC's so
chances are that it might be a better library for your purposes.  My
mode X library was written specifically for Xspace/Netspace, not to be
a general purpose library.


Xspace and Netspace store an array of flags, two for each key.  One
flag has the current state of the key, up or down, and the other is
set only when the key is pressed.  In your game loop, if the second
flag is set, then the key was pressed within the past loop (note that
it need no longer be pressed.)  Act on the keypress and then reset it
with the value of the first key.

					- Steven Dollins
Brown Computer Graphics Group		scd@cs.brown.edu
--
	We have no theology.  We have no philosophy.  We dance.


Here is the assembly source code used for the keyboard interrupt
(int09) and the timer interrupt (int1C) in our games:

begin 644 keyint.zip
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
M         0      204  $M%64E.5"Y(4$L! A0 %     @ Q88U&N88N'>!
M!@  D X   D          0      >@@  $M%641%34\N0U!+!08      P #
+ *4    B#P      
 
end