【发布时间】:2014-04-21 11:23:29
【问题描述】:
我正在尝试根据给定的 theta 变量围绕自己的中心点旋转多边形。它似乎有点工作,但有一些大问题。它以我不理解的越来越快的速度旋转。多边形本身在旋转时也会缩小尺寸,直到点相互移动。
这是我的代码的主要旋转部分。
public void Rotate(double dTheta)
{
this.theta += dTheta;
for(int i = 0; i < body.npoints; i++)
{
body.xpoints[i] =
(int) (body.getBounds2D().getCenterX() + (body.xpoints[i] - body.getBounds2D().getCenterX()) *
Math.cos(theta) - (body.ypoints[i] - body.getBounds2D().getCenterY()) * Math.sin(theta));
body.ypoints[i] =
(int) (body.getBounds2D().getCenterY() + (body.xpoints[i] - body.getBounds2D().getCenterX()) *
Math.sin(theta) + (body.ypoints[i] - body.getBounds2D().getCenterY()) * Math.cos(theta));
}
}
“body”对象是一个多边形,每帧以 60 FPS 的速率绘制。
当用户按下空格键时,theta 变量增加了 Math.PI / 180 倍。
我使用的相当大的数学运算是我在网上找到的,它应该根据弧度角和锚点旋转一个点。
“身体”多边形本身由点 (-16, 0)、(16, -16) 和 (16, 16) 组成。 'body' Polygon 最初放置在位置 (100, 100),除了旋转之外不会从那里平移。
非常感谢您对此问题的任何帮助,在此先感谢您。
【问题讨论】:
-
你在使用像 Slick2D 或 lwjgl 这样的框架吗?使用 Slick2D 只需两条简单的线
-
其实我正在创建自己的游戏引擎。我使用的唯一外部库是 JNativeHook 来处理鼠标和键盘输入(它有助于消除键等的多操作系统错误)。我使用 JPanel 的绘制方法和一个强制转换的 Graphics2D 对象来完成我所有的绘图。
标签: java graphics geometry 2d game-engine