6 Attachment(s)
Pong--paddle collision algorithm help
hello all!
I'm new to the forum, so forgive me if i'm asking too much or if i'm asking something unreasonable. For my APCS class, we were told to make one of three games. I choose the hardest of the three, pong. We were supplied with some basic code as an outline to start off of. Currently, i've created a game of pong were the left and right paddle move properly, but the ball does not bounce off of the right paddle correctly. If i manage to get the ball to the left side, if bounces off the paddle if the paddle is in its course. the ball sticks to the left or right wall if it hits it. it bounces off of the the top and bottom walls as it's supposed to. the code is attached below. There are six classes that i use for this. In the actual "pong" class (not the class "the game") the algorithm for detecting if the ball hits the right paddle is off (like i said before). Can anyone help? Cheers!
the algorithm that needs fixing is as follows:
Code :
if( (ball.getX() <= rightPaddle.getX() + rightPaddle.getWidth() + Math.abs(ball.getXSpeed())
&& (ball.getY() >= rightPaddle.getY()
&& ball.getY() <= rightPaddle.getY() + rightPaddle.getHeight()
|| ball.getY() + ball.getHeight() >= rightPaddle.getY()
&& ball.getY() + ball.getHeight() < rightPaddle.getY() + rightPaddle.getHeight())))
{
System.out.println("hit Right Paddle");
if(ball.getX() >= rightPaddle.getX() + rightPaddle.getWidth() - Math.abs(ball.getXSpeed()))
{
ball.setYSpeed(-ball.getYSpeed());
//System.out.println("changing y speed");
}
else
{
ball.setXSpeed(-ball.getXSpeed());
//System.out.println("changing x speed");
}
}
Attachment 1745
Attachment 1746
Attachment 1747
Attachment 1748
Attachment 1749
Attachment 1750
Re: Pong--paddle collision algorithm help
Quote:
the ball does not bounce off of the right paddle correctly.
Can you describe what it does incorrectly?
What do you see when the ball does not properly bounce off the paddle? Can you describe what happens?
Does the ball completely ignore the paddle or does it react to some parts of the paddle or when some parts of the paddle touches some parts of the ball.
Try debugging the code by adding some println statements that print out the ball's and the paddle's locations when the ball gets close to the paddle (use the x locations would be good).
Please post the code in the forum so it can be copied and not have to be downloaded.
Re: Pong--paddle collision algorithm help
Hi norm,
When the right paddle moves in front of the ball (when they have the same y values if i'm not mistaken) the ball stutters back and forth and moves in the same direction up or down, but stutters left and right while the right paddle is in it's direct line of sight. I tried putting prints in, but i couldn't debug it. Also tried flipping the greater than and less than signs and it didn't really help. Any ideas?
Re: Pong--paddle collision algorithm help
The print out should help you see why the ball stutters when near the paddle. It should show which of the great number of conditions in the if statement is true when the ball changes direction.
Can you post the print outs that show the x & y values for the ball's location and for the paddle's location for when the ball stutters.
Re: Pong--paddle collision algorithm help
Quote:
Originally Posted by
Norm
The print out should help you see why the ball stutters when near the paddle. It should show which of the great number of conditions in the if statement is true when the ball changes direction.
Hi again, just saw the reply. The ball stutters when its y value correlates with the right paddles y value. It isn't a particular y value though, it is for any y value when the two are the same (that's confusing to read---the ball stutters when both the y value for the ball and the paddle are the same, at any location)
print statements are as follows: I just pulled a handful from before the ball intercepts the paddles y intercept, as both y values are the same, and after the y value of the ball are past the paddles y value. It seems that when the y values come between 40 of each other, the ball starts acting up. In the print statement, there is a "hit right paddle" if the first "if" statement which should determine if the paddle actually hits the ball. In this scenario, it prints when their y values are within 40 (if i'm not mistaken)
Ball X 310
Ball Y 310
Right Paddle Y 156
Left Paddle Y 100
Ball X 312
Ball Y 312
Right Paddle Y 164
Left Paddle Y 100
Ball X 314
Ball Y 314
Right Paddle Y 172
Left Paddle Y 100
Ball X 316
Ball Y 316
Right Paddle Y 180
Left Paddle Y 100
Ball X 318
Ball Y 318
Right Paddle Y 188
Left Paddle Y 100
Ball X 320
Ball Y 320
Right Paddle Y 196
Left Paddle Y 100
Ball X 322
Ball Y 322
Right Paddle Y 204
Left Paddle Y 100
Ball X 324
Ball Y 324
Right Paddle Y 212
Left Paddle Y 100
Ball X 326
Ball Y 326
Right Paddle Y 220
Left Paddle Y 100
Ball X 328
Ball Y 328
Right Paddle Y 228
Left Paddle Y 100
Ball X 330
Ball Y 330
Right Paddle Y 236
Left Paddle Y 100
Ball X 332
Ball Y 332
Right Paddle Y 244
Left Paddle Y 100
Ball X 334
Ball Y 334
Right Paddle Y 252
Left Paddle Y 100
Ball X 336
Ball Y 336
Right Paddle Y 260
Left Paddle Y 100
Ball X 338
Ball Y 338
Right Paddle Y 268
Left Paddle Y 100
Ball X 340
Ball Y 340
Right Paddle Y 276
Left Paddle Y 100
Ball X 342
Ball Y 342
Right Paddle Y 284
Left Paddle Y 100
Ball X 344
Ball Y 344
Right Paddle Y 292
Left Paddle Y 100
hit Right Paddle
Ball X 346
Ball Y 346
Right Paddle Y 300
Left Paddle Y 100
hit Right Paddle
Ball X 344
Ball Y 348
Right Paddle Y 308
Left Paddle Y 100
hit Right Paddle
Ball X 346
Ball Y 350
Right Paddle Y 316
Left Paddle Y 100
hit Right Paddle
Ball X 344
Ball Y 352
Right Paddle Y 324
Left Paddle Y 100
hit Right Paddle
Ball X 346
Ball Y 354
Right Paddle Y 332
Left Paddle Y 100
hit Right Paddle
Ball X 344
Ball Y 356
Right Paddle Y 340
Left Paddle Y 100
hit Right Paddle
Ball X 346
Ball Y 358
Right Paddle Y 348
Left Paddle Y 100
hit Right Paddle
Ball X 344
Ball Y 360
Right Paddle Y 356
Left Paddle Y 100
hit Right Paddle
Ball X 346
Ball Y 362
Right Paddle Y 364
Left Paddle Y 100
hit Right Paddle
Ball X 344
Ball Y 364
Right Paddle Y 372
Left Paddle Y 100
Ball X 346
Ball Y 366
Right Paddle Y 380
Left Paddle Y 100
Ball X 348
Ball Y 368
Right Paddle Y 388
Left Paddle Y 100
Ball X 350
Ball Y 370
Right Paddle Y 396
Left Paddle Y 100
Ball X 352
Ball Y 372
Right Paddle Y 404
Left Paddle Y 100
Ball X 354
Ball Y 374
Right Paddle Y 404
Left Paddle Y 100
Ball X 356
Ball Y 376
Right Paddle Y 404
Left Paddle Y 100
Ball X 358
Ball Y 378
Right Paddle Y 404
Left Paddle Y 100
Ball X 360
Ball Y 380
Right Paddle Y 404
Left Paddle Y 100
Ball X 362
Ball Y 382
Right Paddle Y 404
Left Paddle Y 100
Ball X 364
Ball Y 384
Right Paddle Y 404
Left Paddle Y 100
Ball X 366
Ball Y 386
Right Paddle Y 404
Left Paddle Y 100
Ball X 368
Ball Y 388
Right Paddle Y 404
Left Paddle Y 100
Ball X 370
Ball Y 390
Right Paddle Y 404
Left Paddle Y 100
Re: Pong--paddle collision algorithm help
It'd be easier to read if the 4 values were on one line.
Ball X=310 Y=310, Right Paddle X=??, Y=404 Left Paddle X=??? Y=100
What is the x values for the paddles?
Also there should be a printout when a collision happens.
what is the size of the ball? What is the size of the paddle?
There shouldn't be any printouts when the ball is at a distance from the paddle. You're only interested in seeing what happens when the ball approaches the paddle and there is a collusion.
Re: Pong--paddle collision algorithm help
The right and left paddle's x values do not change and are 555, and 0, respectively. There is a print statement when there is a collision-- if you look, there is a print of "hit Right Paddle" in certain circumstances. If it hits the left paddle, there is a print statement "hit Left Paddle". The ball is 10x10 and the paddles are 20x50. Does that help? and why shouldn't i have print statements all the time? I need to know the values either way don't I?
Re: Pong--paddle collision algorithm help
Quote:
print statements all the time
Reduces output if you don't print values when there isn't a collision about to happen.
For events like collisions add some eye catchers like >>>>>> HIT RIGHT <<<<<<
To save having to do arithmetic in your head printing the x,y values on the side where the collision is going to happen will make it easier to see. When the ball moves to the right, print the right side of the ball and the left side of the paddle. When the ball moves left, print the left side of the ball and the right side of the paddle.
Then overlaps between ball and paddle will be obvious and not require any mental math.
Re: Pong--paddle collision algorithm help
I don't quite follow---what will this tell me?
Re: Pong--paddle collision algorithm help
Quote:
what will this tell me?
It will show you where the ball and paddle are when they collide and how their locations change because of the logic of the code. I assumed you wanted to find out what the code was doing so you could change it to act the way you want. One way to see what the code is doing is to print out the objects' locations so you can see where they are when they collide.
Or you can continue to make random changes to the conditions in the if tests until you hit on the correct logic.
Re: Pong--paddle collision algorithm help
I already tried the random changes, and of course, that didn't work :-/ so i'll try doing the other print statements later
Re: Pong--paddle collision algorithm help