|
Subject: [stella] bouncing ball From: Jeff Johnston <jeffryj@xxxxxxxxxxxxx> Date: Sat, 6 Jul 2002 10:23:08 -0700 (MST) |
I think I may have figure out an easy way to compute this without the
polar code (although that demo sure is cool :):
When a ball hits the paddle, it's hitting a round object, but we can
pretend that it is hitting a flat object. The slope of the
flat line that the ball is hitting is going to be equal to the angle of
that point of the circle (angle 0-255).
My understanding of the result of a ball bouncing against a flat object is
that the ball's exit angle is reflected around the angle of the object it
hits.
Example:
Ball direction, 128 degrees (256 "degrees" per circle)
Paddle angle, 144 degrees
So the difference in angles is 144-128=16 degrees
144+16=160 degrees.
But the ball also needs to change direction "180" (128) degrees, so:
160+128=288=>32 degrees
The ball goes in at 128 degrees, comes back at 32 degrees.
To draw the ball traveling at a certain angle could be hard without the
polar code, except if we construct a primitive line algorithm (here is my
qbasic version for proof of concept).. none of the math involved is hard
for the 6502 to do:
SCREEN 13
FOR ANGLE=0 TO TO 255
GOSUB TRACE
NEXT ANGLE
DO:LOOP WHILE INKEY$=""
SCREEN 0:WIDTH 80
END
TRACE:
DEVIATION=0:BALLX=100:BALLY=100
FOR A=1 TO 100 'in the real game there wouldn't be a set distance
'find the best angle for now (out of 0, 32, 64, 96, 128, 160, 192, 224)
BEST=ANGLE+DEVIATIO
BEST=INT(BEST/32) 'same as shifting right
'CINT would have been more accurate above, but that's harder
BEST=BEST*32 'same as shifting left
'update the deviation from our desired angle
DEVIATION=ANGLE+DEVIATION-BEST
'move ball
IF BEST>=32 AND BEST<=96 THEN BALLX=BALLX+1
IF BEST>=96 AND BEST<=160 THEN BALLY=BALLY-1
IF BEST>=160 AND BEST<=224 THEN BALLX=BALLX-1
IF BEST>=224 OR BEST<=32 THEN BALLY=BALLY+1
'draw ball
PSET (BALLX,BALLY)
NEXT A
RETURN
Now I'm going to put this in.. we'll see how it goes :)
calamari
----------------------------------------------------------------------------------------------
Archives (includes files) at http://www.biglist.com/lists/stella/archives/
Unsub & more at http://www.biglist.com/lists/stella/
| Current Thread |
|---|
|
| <- Previous | Index | Next -> |
|---|---|---|
| Re: [stella] best size, Chris Wilkson | Thread | Re: [stella] bouncing ball, Jeff Johnston |
| Re: [stella] best size, Chris Wilkson | Date | [stella] Debugger, Glenn Saunders |
| Month |