我正在开发一个用java模拟3D射击游戏的游戏而不使用任何3D库。现在我有一个由玩家控制的船,围绕屏幕的中心点旋转,使用(在这种情况下,向右移动)。
angle += 0.1;
x = Math.cos(angle) * radius + cX;
y = Math.sin(angle) * radius + cY;
angle
是相对于中心点的位置(例如,270位于中心下方),x
和y
是当前的船位,{{1} }是距离中心的距离,radius
和cX
是中心点的位置。
现在围绕该点旋转工作顺利,但我不知道如何处理旋转实际的船总是指向中心。我在网上看了很多,但无法弄清楚如何在不影响屏幕上的其他对象的情况下轮换个人cY
(或者如果不起作用,Image
数组)
长话短说,如何让个人drawLines
不断指向偏远的x,y位置?
答案 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。