Hallo,
Ich programmiere gerade an einem 2D-Spiel und muss dafür Bilder in 1° Schritten drehen können.
Ich berechne die Bilder vor dem Start des Spiels, d.h. ich hab 1 Bild von dem ich ausgehe und berechne daraus die 359 anderen.
Der Code:
Es werden momentan nur die Bilder des Flugzeuges gedreht, es müssen 2 Bilder sein weil das andere Flugzeug in die entgegengesetzte Richtung fliegt.
Damit zeichne ich das Bild.
Es gibt nur leider ein Problem, der Mittelpunkt stimmt bei den gedrehten bildern nicht mehr, dazu 2 Bilder:
Dem einen Flugzeug-Bild hab ich einen schwarzen Hintergrund verpasst, dann hab ich noch ein Rechteck gemalt welches genau der Göße und Position des Bildes entspricht und dann noch einen roten Punkt in die Mitte gemalt (=>das soll der Drehpunkt sein).
Bild 1
Bild 2
(sorry, die Bilder sind etwas groß...)
Wie man sieht wird das Bild größer beim drehen z.B. um 45°, was ja auch logisch ist, aber das Bild wird nur noch rechts und unten "verlängert", oben wird einfach abgeschnitten.
Das führt nun letztendlich dazu das der Mittelpunkt nicht mehr stimmt.
Die Frage ist nun wie kann ich erreichen das entweder
a) das Bild in alle Richtungen vergrößert wird oder
b) in keine Richtung vergrößert wird
sodass der Mittelpunkt immer stimmt?
mfg
Christian
Ich programmiere gerade an einem 2D-Spiel und muss dafür Bilder in 1° Schritten drehen können.
Ich berechne die Bilder vor dem Start des Spiels, d.h. ich hab 1 Bild von dem ich ausgehe und berechne daraus die 359 anderen.
Der Code:
Code:
BufferedImage bi = null;
try {
if (direction == 0){
bi = ImageIO.read(new File("images/flugzeug3.gif"));
} else {
bi = ImageIO.read(new File("images/flugzeug2_r.gif"));
}
img[0] = bi;
} catch (Exception e) {
e.printStackTrace();
}
for (int i = 1; i <= 359; i++){
double angle = (359-i)*Math.PI/180;
AffineTransform tx = AffineTransform.getRotateInstance(angle,bi.getWidth()/2,bi.getHeight()/2);
AffineTransformOp op = new AffineTransformOp(tx, AffineTransformOp.TYPE_BILINEAR);
BufferedImage rotatedImage = op.filter(bi, null);
img[i] = rotatedImage;
}
Es werden momentan nur die Bilder des Flugzeuges gedreht, es müssen 2 Bilder sein weil das andere Flugzeug in die entgegengesetzte Richtung fliegt.
Code:
g.drawImage(img[(int)direction],pos.x-img[(int)direction].getWidth()/2, pos.y-img[(int)direction].getHeight()/2, null);
Es gibt nur leider ein Problem, der Mittelpunkt stimmt bei den gedrehten bildern nicht mehr, dazu 2 Bilder:
Dem einen Flugzeug-Bild hab ich einen schwarzen Hintergrund verpasst, dann hab ich noch ein Rechteck gemalt welches genau der Göße und Position des Bildes entspricht und dann noch einen roten Punkt in die Mitte gemalt (=>das soll der Drehpunkt sein).
Bild 1
Bild 2
(sorry, die Bilder sind etwas groß...)
Wie man sieht wird das Bild größer beim drehen z.B. um 45°, was ja auch logisch ist, aber das Bild wird nur noch rechts und unten "verlängert", oben wird einfach abgeschnitten.
Das führt nun letztendlich dazu das der Mittelpunkt nicht mehr stimmt.
Die Frage ist nun wie kann ich erreichen das entweder
a) das Bild in alle Richtungen vergrößert wird oder
b) in keine Richtung vergrößert wird
sodass der Mittelpunkt immer stimmt?
mfg
Christian