AffineTransform drehung

TheSorm

Bekanntes Mitglied
Also ich habe eine grefik die um 180 grad gedreht angezeigt werden soll aber so funktionirt daas nicht wiso? die grfik blinkt nur und wirt normal angezeigt!


Java:
	public void draw(Graphics2D g) {
		setMapPosition();
		AffineTransform bevor = g.getTransform();
		
		if(sprites != null){
		    transform.rotate(Math.toRadians(180));
	        g.setTransform(transform);
	        g.drawImage(animation.getImage(), (int) (x + xmap - width / 2), (int) (y + ymap - height / 2), null);
	        }
		
        g.setTransform(bevor);
		g.setFont(font);
		g.setColor(Color.BLACK);
		if(sprites != null){
			g.drawString(""+scoor, (int) (xstart + xmap + sprites[0].getWidth()), (int)(ystart + ymap - sprites[0].getHeight() - hoch));
			hoch += 1.4;
		}
		else{
			g.drawString(""+scoor, (int) (xstart + xmap + 32), (int)(ystart + ymap - 32 - hoch));
			hoch += 1.4;
		}
	}
 

TheSorm

Bekanntes Mitglied
ich bin kein kompletter anfänger und ich habe doch geschrieben das die grafik blinkt wenn du sowas schreibst soltest du iwssen das wenn ich das nicht deffinirt hätte da eine null pointer Eyception bei raus kommen würde ;) Also für dich ich deffiniere das beim inizialsieren der Klasse
 
Zuletzt bearbeitet:

DrZoidberg

Top Contributor
Das heisst also du rotierst "transform" mehrmals ohne es wieder zurückzusetzen?
Für das hier mal in Zeile 4 ein.
Java:
transform = bevor.clone();
 

TheSorm

Bekanntes Mitglied
Hm es Funktionirt nicht jetzt wirt einfach die grafik ganicht angezeigt ? Aber der Text wirt richtig gezeichnet!

Java:
	public void draw(Graphics2D g) {
		setMapPosition();
		AffineTransform bevor = g.getTransform();
	    transform = (AffineTransform) bevor.clone();
		if(sprites != null){
		    transform.rotate(Math.toRadians(180));
	        g.setTransform(transform);
	        g.drawImage(animation.getImage(), (int) (x + xmap - width / 2), (int) (y + ymap - height / 2), null);
	        }
		
        g.setTransform(bevor);
		g.setFont(font);
		g.setColor(Color.BLACK);
		if(sprites != null){
			g.drawString(""+scoor, (int) (xstart + xmap + sprites[0].getWidth()), (int)(ystart + ymap - sprites[0].getHeight() - hoch));
			hoch += 1.4;
		}
		else{
			g.drawString(""+scoor, (int) (xstart + xmap + 32), (int)(ystart + ymap - 32 - hoch));
			hoch += 1.4;
		}
	}
 
Zuletzt bearbeitet:

DrZoidberg

Top Contributor
Ich vermute mal es liegt einfach am Rotationszentrum.
Standardmäßig wird um (0,0) rotiert, d.h. um die linke obere Ecke des Fensters, womit dann deine Grafik außerhalb des Fensters landet.

Hier ist mal ein lauffähiges Beispiel.
Java:
import javax.swing.*;
import java.awt.*;
import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.net.URL;
import java.awt.geom.AffineTransform;

public class Draw extends JPanel {
    public static void main(String[] args) {
        Draw draw = new Draw();
        JFrame frame = new JFrame();
        frame.add(draw);
        draw.setPreferredSize(new Dimension(800, 600));
        frame.pack();
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setVisible(true);
    }
    
    private BufferedImage image;
    
    public Draw() {
        try {
            image = ImageIO.read(new URL("http://www.java-forum.org/images/misc/java_forum_org.gif"));
        } catch(Exception e) {
            e.printStackTrace();
        }
    }
    
    @Override
    public void paint(Graphics g) {
        draw((Graphics2D)g);
    }
    
    public void draw(Graphics2D g) {
        AffineTransform bevor = g.getTransform();
        AffineTransform transform = (AffineTransform) bevor.clone();
        transform.rotate(Math.toRadians(180), 400, 400);
        g.setTransform(transform);
        g.drawImage(image, 400, 400, null);
    }
}
 

Neue Themen


Oben