我正在用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位置?
你需要的是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相去甚远。