0

我正在用 java 开发一个管射手式游戏,它可以模拟 3D,而无需实际使用任何 3D 库。现在我有一个玩家控制的船,它围绕屏幕的中心点旋转,使用(在这种情况下,向右移动)。

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

angle相对于中心点的位置在哪里(例如 270 位于中心正下方),x并且y是当前船舶位置,radius是与中心的距离,cX并且cY是中心点的位置。

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

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

4

1 回答 1

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 相去甚远。

于 2012-09-30T21:15:56.890 回答