Search code examples
javarotation2dimage-rotation

Java 2d rotation in direction mouse point


So far I have a java app where I draw a circle(player) and then draw a green rectangle on top(gun barrel). I have it so when the player moves, the barrel follows with it. I want it to find where the mouse is pointing and then rotate the barrel accordingly. For an example of what I mean look at this video I found http://www.youtube.com/watch?v=8W7WSkQq5SU See how the player image reacts when he moves the mouse around?

Here's an image of what the game looks like so far:

My Progress

So how do I rotate it like this? Btw I don't like using affinetransform or Graphics2D rotation. I was hoping for a better way. Thanks


Solution

  • Using the Graphics2D rotation method is indeed the easiest way. Here's a simple implementation:

    int centerX = width / 2;
    int centerY = height / 2;
    double angle = Math.atan2(centerY - mouseY, centerX - mouseX) - Math.PI / 2;
    
    ((Graphics2D)g).rotate(angle, centerX, centerY);
    
    g.fillRect(...); // draw your rectangle
    

    If you want to remove the rotation when you're done so you can continue drawing normally, use:

    Graphics2D g2d = (Graphics2D)g;
    AffineTransform transform = g2d.getTransform();
    
    g2d.rotate(angle, centerX, centerY);
    
    g2d.fillRect(...); // draw your rectangle
    
    g2d.setTransform(transform);
    

    It's a good idea to just use Graphics2D anyway for anti-aliasing, etc.