精灵旋转时,边框不会旋转

时间:2014-01-06 22:16:13

标签: java rotation sprite bounding-box

使用简单的Java 2D游戏。坦克由用户控制。它可以以任何角度旋转,并沿该角度方向移动。

我正在为坦克制作一个边界框,所以稍后我可以添加碰撞检测。目前,无论它在哪里,我都有精灵后面的框,但是当精灵旋转时它不会旋转。我尝试添加代码以使框子与精灵一起旋转,但添加此代码只会使边界框变得疯狂。它不再是一个盒子,更像是一条闪烁和移动的线条。

(显然,边界框应该是不可见的,但是现在我在屏幕上绘制以检查问题)。

xcoo[]ycoo[]都是double类型,每个都包含四个值。这些值是边界框的四个顶点的坐标(矩形Path2D)。

(请注意,实际的边界框仅在需要在屏幕上绘制时,或者在我尚未编写的碰撞检测中创建。大多数情况下,它只是坐标。)< / em>的

Tank的move()方法在游戏循环的每个循环中调用。

move()方法更新精灵的位置以及边界框的位置。这很好用。但正如我所说,试图在该方法中旋转边界框(也就是使用旋转矩阵操纵它的顶点),使其成为现实

以下是Tank的{​​{1}}方法:

move()

我的轮换有什么问题?我怀疑这是问题所在代码的一部分,但如果你有不同的想法,请告诉我发布更多代码。

非常感谢

1 个答案:

答案 0 :(得分:1)

回答问题的标题 - 当精灵旋转时,边界框不会旋转

在计算机图形学中,最常见的边界框实现是Axis-aligned minimum bounding box,当你旋转精灵时它显然不会旋转,因为它是轴对齐

我不知道您正在使用的Java 2D包的实现方式,但它听起来确实如此,而不是您希望的Arbitrarily oriented minimum bounding box

也许你的边界框的渲染会以某种方式假设它是axis-aligned,因此当你用一个不是axis-aligned的框来呈现它时就无法渲染。