如何围绕远程点旋转单个图像



我正在用java开发一个管射击游戏式的游戏,它模拟3D而不实际使用任何3D库。现在我有一艘玩家控制的飞船,它围绕屏幕的中心点旋转,使用(在本例中,用于向右移动)。

    angle += 0.1;
    x = Math.cos(angle) * radius + cX;
    y = Math.sin(angle) * radius + cY;

其中angle是相对于中心点的位置(例如 270 位于中心正下方),xy是当前船舶位置,radius是与中心的距离,cXcY 是中心点的位置。

现在围绕该点旋转工作顺利,但我不确定如何处理旋转实际船以始终指向中心。我在网上看了很多,但无法弄清楚如何在不影响屏幕上其他对象的情况下旋转单个Image(或者如果不起作用,则drawLines数组)。

长话短说,如何旋转单个Image以不断指向远程x,y位置?

你需要的是AffineTransform类,它基本上是java中的一个矩阵类。 Graphics2D有一个接受AffineTransform实例的绘制图像变体:

boolean java.awt.Graphics2D.drawImage(Image img, AffineTransform xform, ImageObserver obs)

若要创建转换,可以使用 2D 矩阵操作:

AffineTransform trans = new AffineTransform();
trans.translate(x, y);
trans.rotate(theta);
trans.scale(scalex, scaley);
etc...

请注意,顺序很重要,您可能希望先缩放,旋转,然后将图像遍历到相应的位置。它应该做得很好。

Java使用了一些3D功能来尽可能快地绘制,它比软件渲染器更快,但与本机opengl相去甚远。

最新更新