在Java游戏中旋转精灵,而不旋转整个屏幕

时间:2014-01-01 17:06:17

标签: java rotation awt java-2d affinetransform

如何在不旋转整个屏幕的情况下在Java 2D游戏中旋转精灵?我想只旋转精灵。

我试过这样做:

(g2d是Graphics2D对象);

g2d.rotate(Math.toRadians(30), 50, 50);
g2d.drawImage(image1, 50, 50, this);

g2d.rotate(Math.toRadians(50), 100, 100);
g2d.drawImage(image2, 100, 100, this);

但是,不是将image1旋转30度,然后将image2旋转50度,每次旋转都会影响整个屏幕。

有没有办法只使用g2d.rotate()方法在游戏中旋转特定的精灵? 如果没有:我被告知我可以使用AffineTransform对象,但在网上找不到实际解释如何从一开始就使用这个令人困惑的对象的教程。您能给我一个链接或向我解释如何使用AffineTransform对象吗?

我想在普通的2D游戏中采用最“标准”的方式。

1 个答案:

答案 0 :(得分:1)

每当您对其进行更改时,都需要重置图形,因为它将用于渲染子项以及可能的其他组件。有几种方法可以做到这一点。执行此操作的最佳方法通常是使用Graphics.create()制作副本。但是,在您的情况下,撤消个别更改可能更容易:

g2d.rotate(Math.toRadians(-30), 50, 50);
g2d.drawImage(image1, 50, 50, this);
g2d.rotate(Math.toRadians(30), 50, 50);

g2d.rotate(Math.toRadians(50), 100, 100);
g2d.drawImage(image2, 100, 100, this);
g2d.rotate(Math.toRadians(-50), 50, 50);

请注意,调用rotate等实际上是将AffineTransform应用于当前的图形配置。