Java 如何围绕远程点旋转单个图像
我正在用java开发一个类似于管射击游戏的游戏,它模拟3D而不实际使用任何3D库。现在我有一个玩家控制的飞船,它围绕屏幕的中心点旋转,使用(在本例中,用于向右移动) 其中,Java 如何围绕远程点旋转单个图像,java,Java,我正在用java开发一个类似于管射击游戏的游戏,它模拟3D而不实际使用任何3D库。现在我有一个玩家控制的飞船,它围绕屏幕的中心点旋转,使用(在本例中,用于向右移动) 其中,角度是相对于中心点的位置(例如270位于中心正下方),x和y是当前船舶位置,半径是距离中心的距离,cX和cY是中心点的位置 现在围绕着点旋转工作很顺利,但我不知道如何处理旋转实际船舶始终指向中心。我在网上查阅了很多资料,但不知道如何在不影响屏幕上其他对象的情况下旋转单个图像(或者如果这不起作用,一系列绘图线) 长话短说,如何旋
角度
是相对于中心点的位置(例如270位于中心正下方),x
和y
是当前船舶位置,半径
是距离中心的距离,cX
和cY
是中心点的位置
现在围绕着点旋转工作很顺利,但我不知道如何处理旋转实际船舶始终指向中心。我在网上查阅了很多资料,但不知道如何在不影响屏幕上其他对象的情况下旋转单个图像
(或者如果这不起作用,一系列绘图线
)
长话短说,如何旋转单个
图像
以不断指向远程x,y位置?您需要的是仿射变换
类,它在java中基本上是一个矩阵类Graphics2D
有一个draw image变量,它接受一个AffineTransform
实例:
boolean java.awt.Graphics2D.drawImage(Image img, AffineTransform xform, ImageObserver obs)
要创建变换,可以使用二维矩阵操作:
AffineTransform trans = new AffineTransform();
trans.translate(x, y);
trans.rotate(theta);
trans.scale(scalex, scaley);
etc...
请注意,顺序很重要,您可能需要先缩放、旋转图像,然后将图像平移到相应的位置。应该可以
Java使用了一些3D功能来尽可能快地绘制,它比软件渲染器快,但与原生opengl相去甚远
AffineTransform trans = new AffineTransform();
trans.translate(x, y);
trans.rotate(theta);
trans.scale(scalex, scaley);
etc...