junior0007
Grünschnabel
Hallo!
Ich versuche mich gerade an einem kleinen Tetris. Soweit läuft alles ganz gut - nur die Rotation klappt nicht. Ich würde gern die Shapes an sich nicht verändern, deshalb wird ein Shape über ein Polygon definiert, und dann mittels AffineTransform an die entsprechende Stelle geschoben. Die Rotation soll über die selbe Transformationsmatrix gemacht werden.
Das verschieben klappt, aber die Rotation geht leider überhaupt nicht.
Hier mal die wesentlichen Teile:
Das hier geht scheinbar:
Das hier nicht:
und gezeichnet wird das ganze dann so:
Ist das überhaupt der richtige (od. ein sinnvoller) Ansatz? Warum geht die Translation aber nicht die Rotation?
Gruß
Junior0007
Ich versuche mich gerade an einem kleinen Tetris. Soweit läuft alles ganz gut - nur die Rotation klappt nicht. Ich würde gern die Shapes an sich nicht verändern, deshalb wird ein Shape über ein Polygon definiert, und dann mittels AffineTransform an die entsprechende Stelle geschoben. Die Rotation soll über die selbe Transformationsmatrix gemacht werden.
Das verschieben klappt, aber die Rotation geht leider überhaupt nicht.
Hier mal die wesentlichen Teile:
Das hier geht scheinbar:
Code:
AffineTransform trans = new AffineTransform();
/* Teil nach rechts verschieben */
public void moveRight(int steps)
{
//breite des Polygons
double breite = getBounds().getWidth();
// wohin soll verschoben werden
double posX = trans.getTranslateX() + breite;
double dx;
// falls zu Nah am Rand...
if(posX+steps > GameController.WIDTH)
{
// verschiebe bis zum Rand
dx = GameController.WIDTH - posX;
}
else
{
// verschiebe mit Std_wert
dx = steps;
}
// translation auf Matrix schreiben
trans.translate(dx, 0);
}
Das hier nicht:
Code:
/* rotation um Mittelpunkt */
public void rotate(int angle_deg)
{
double angle_rad = Math.toRadians(angle_deg);
Rectangle2D r = getBounds();
trans.rotate(angle_rad, r.getCenterX(), r.getCenterY());
}
und gezeichnet wird das ganze dann so:
Code:
public void paint(Graphics2D g)
{
super.paint(g);
Shape s = trans.createTransformedShape(shape);
g.fill(s);
}
Ist das überhaupt der richtige (od. ein sinnvoller) Ansatz? Warum geht die Translation aber nicht die Rotation?
Gruß
Junior0007