Как повернуть изображение в направлении расположения курсора?

#java #swing #rotation #position #graphics2d

Вопрос:

Я пытаюсь повернуть изображение в направлении расположения курсора (вращение должно происходить от центра изображения и вращаться поперек себя в направлении расположения курсора).

 public void rotateImg(Graphics g)  {  Graphics2D g2 = (Graphics2D)g.create();   int cursorX = MouseInfo.getPointerInfo().getLocation().x - panel.getLocationOnScreen().x; // Mouse pos  int cursorY = MouseInfo.getPointerInfo().getLocation().y - panel.getLocationOnScreen().y;  Point center = new Point(x size/2,y size/2); //Image center (x,y are the player's coordinates)  double dx = cursorX - center.getX();  double dy =cursorY - center.getY();   System.out.println(Math.toDegrees(Math.atan2(dx,dy)));   g2.rotate(Math.toRadians(Math.atan2(dy,dx)),center.x,center.y);  g2.drawImage(playerImage,x,y,size,size, null);  }  

эта функция выполняется внутри потока, поэтому она никогда не останавливается, и я проверил, обновляются ли позиции курсора (они обновляются), а также угол, но когда я запускаю ее, она едва вращается и не может даже повернуть на 45 градусов

Заранее спасибо!

Ответ №1:

Попробовал это:

 public void rotateImg(Graphics g)  {  double degrees;  Graphics2D g2 = (Graphics2D)g.create();   Point center = new Point(x size/2,y size/2); //Image center (x,y are the player's coordinates)  int cursorX = MouseInfo.getPointerInfo().getLocation().x - panel.getLocationOnScreen().x; // Mouse pos  int cursorY = MouseInfo.getPointerInfo().getLocation().y - panel.getLocationOnScreen().y;  double dx = cursorX - center.getX();  double dy = cursorY - center.getY();   degrees = Math.toDegrees(Math.atan2(dy,dx)) 90;   g2.rotate(Math.toRadians(degrees),center.x,center.y);  g2.drawImage(playerImage,x,y,size,size, null);  }  

это сработало!