Swing Rotation eines Bildes mit beliebigen Koordinaten um den Mittelpunkt

Feeder

Bekanntes Mitglied
Hey, ich möchte mein Bild innerhalb einer Klasse UFO (Spieler), während des Aufrufes der paint methode um seinen Mittelpunkt drehen lassen. Dieser gibt zumindestens einen FIXPunkt an, jedoch lässt sich der Punkt(0.5*getWidth(),0.5*getHeight())nicht einfach mit den Koordinaten des Bildens addieren ohne nonsense zuerhalten.

Code:
public void paintComponent(Graphics g){
      //schlauer GameManager der eine Liste aller GameOjekte mit sich führt
     // list ArrayList<GameOBject>
        int counter = 1;
        while(counter <= m.getLength()){

           
           
            AffineTransform at = new AffineTransform();
            at.rotate(Math.toRadians(m.list.get(counter-1).getScale()),
                    m.list.get(counter-1).getImage().getWidth(null)*0.5,
                    m.list.get(counter-1).getImage().getHeight(null)*0.5);
           
            Graphics2D g2d = (Graphics2D) g; 
            //g2d.setTransform(at);
            g2d.drawImage(m.list.get(counter-1).getImage(),at,null);
            counter++;
        }
    }

Habt ihr einen Beispiel Code welches ein Bild dauerhaft bewegt während es, sich im Panel bewegt?
 
Code:
public void paintComponent(Graphics g){
        int counter = 1;
        while(counter <= m.getLength()){
         
         
            AffineTransform at = new AffineTransform();
            at.rotate(Math.toRadians(m.list.get(counter-1).getScale()),
                    m.list.get(counter-1).getImage().getWidth(null)*0.5,
                    m.list.get(counter-1).getImage().getHeight(null)*0.5);
         
            Graphics2D g2d = (Graphics2D) g;
            //g2d.setTransform(at);
            g2d.drawImage(m.list.get(counter-1).getImage(),at,null);
            counter++;
            }
  
         
        }
    public void paintComponent(Graphics g){
        int counter = 1;
        while(counter <= m.getLength()){
         
         
            AffineTransform at = new AffineTransform();
            at.rotate(Math.toRadians(m.list.get(counter-1).getScale()),
                    m.list.get(counter-1).getX()+m.list.get(counter-1).getImage().getWidth(null)*0.5,
                    m.list.get(counter-1).getY()+m.list.get(counter-1).getImage().getHeight(null)*0.5);
         
            Graphics2D g2d = (Graphics2D) g;
            //g2d.setTransform(at);
            g2d.drawImage(m.list.get(counter-1).getImage(),at,null);
            counter++;
        }
    }

Das funzt net🙁
 

Anhänge

Für die Rotation eines Bildes musst du dir wahrscheinlich einfach eine Rotationsmatrix erstellen, oder dir anhand einfach Winkels + bisschen Satz des Pythagoras pro Zeiteinheit immer den nächsten Punkt suchen, an dem das Bild gerendert werden soll. Oder noch besser, benutzte ein Framework, das dass alles schon kann^^

https://de.wikipedia.org/wiki/Drehmatrix
 

Zurück
Oben