I am creating a pong game. However, in my game, the paddles have the ability to rotate about their center.
These paddles are represented by rectangle2D objects. Now, these rectangles are supposed to hit the ball as it comes to them. The ball is represented by a circle2D object, and when the ball hits the paddle (this is done by using the intersects method of the rectangles), the ball reverses direction. This works fine when the paddles are not rotated, but when they are rotated, the intersects method doesn't work. When I use this statement:
paddle2.intersects(xLocation, yLocation, diameter, diameter)
(Where paddle2 is the name of one of the rectangles, and the parameters passed to it represent the x coordinate, y coordinate, and radius of the circle)
The circle acts as if the rectangle isn't rotated. That is, it will bounce off the rectangles original position.
I should probably mention that I am rotating the rectangles using affine transforms. This is the command I use to make the rectangle appear rotated:
g2.rotate(Math.toRadians(angle), xLocation+(width/2), yLocation+(height/2));
(where the parameters are the rotation angle of the rectangle, and the x and y coordinates of the center).
Then, I reset the affine transform of my g2 object back to a regular affine transform.
I have been researching this problem for awhile now, and I have found a couple discussions on the problem. However, they seem to be over my head, and they seem to deal with matrix mathematics (and as someone who has never learned the necessary math, I get quite lost). So, I was hoping that someone could provide a simple solution, or walk me through the required math.
Thanks!
The reason the intersect method doesn't work is because you aren't actually rotating the
Rectangle2D
. You are telling the graphics context to rotate such that anything it does draw (such as an unrotatedRectangle2D
) is drawn rotated, but the actualRectangle2D
instance isn't modified.Maybe you can use
Polyon
for the paddles, instead ofRectangle2D
, and rotate them as in this answer. That way the actual instance will be rotated (so you won't need to rotate yourGraphics2D
instance) and collision detection should work properly.Maybe this is an old question, but I think to have the solution for anyone else that will read this post:
This is the code to test Collisions between a circle (The Ball) and a rectangle (That can rotate).