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

时间:2012-09-30 21:02:06

标签: java

我正在开发一个用java模拟3D射击游戏的游戏而不使用任何3D库。现在我有一个由玩家控制的船,围绕屏幕的中心点旋转,使用(在这种情况下,向右移动)。

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

angle是相对于中心点的位置(例如,270位于中心下方),xy是当前的船位,{{1} }是距离中心的距离,radiuscX是中心点的位置。

现在围绕该点旋转工作顺利,但我不知道如何处理旋转实际的船总是指向中心。我在网上看了很多,但无法弄清楚如何在不影响屏幕上的其他对象的情况下轮换个人cY(或者如果不起作用,Image数组)

长话短说,如何让个人drawLines不断指向偏远的x,y位置?

1 个答案:

答案 0 :(得分:0)

你需要的是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。