Java 边界框不';当精灵旋转时,请不要旋转

Java 边界框不';当精灵旋转时,请不要旋转,java,rotation,sprite,bounding-box,Java,Rotation,Sprite,Bounding Box,正在开发一个简单的Java2D游戏。油箱由用户控制。它可以以任何角度旋转,并沿该角度的方向移动 我正在为坦克制作一个边界框,以便稍后添加碰撞检测。目前,无论精灵走到哪里,我都有一个跟随它的盒子,但当精灵旋转时它不会旋转。我尝试添加代码使框与精灵一起旋转,但添加此代码只会使边界框变得疯狂。它不再显示为一个方框,更像是一条线,只是在闪烁和移动 (显然边界框应该是不可见的,但现在我在屏幕上绘制它来检查问题) xcoo[]和ycoo[]都是double类型,每个都有四个值。这些值是边界框的四个顶点的坐标

正在开发一个简单的Java2D游戏。油箱由用户控制。它可以以任何角度旋转,并沿该角度的方向移动

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

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

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

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

坦克的
move()
方法在游戏循环的每个周期都被调用

move()
方法更新精灵的位置和边界框的位置。这个很好用。但正如我所说的,尝试用这种方法旋转边界框(也就是使用旋转矩阵操纵它的顶点)会使它运行

以下是
储罐
move()
方法:

public void move(){

    // Updates the location of the sprite. (works)
    x += dx;
    y += dy;

    bbCenterX += dx;
    bbCenterY += dy;

    // Updates the location of the bounding box. (works)    
     for(int i=0;i<4;i++){
        xcoo[i] += dx;
        ycoo[i] += dy;
    } 

    // Should rotate the bounding box (aka, manipulate it's coordinates
    // so when it is created with these coordinates, it's rotated).
    // (Doesn't work).
    for(int z=0;z<4;z++){

        xcoo[z] = xcoo[z] - bbCenterX;
        ycoo[z] = ycoo[z] - bbCenterY;

        xcoo[z] = ((xcoo[z] * Math.cos(angle)) - (ycoo[z] * Math.sin(angle)));
        ycoo[z] = ((xcoo[z] * Math.sin(angle)) + (ycoo[z] * Math.cos(angle)));

        xcoo[z] = xcoo[z] + bbCenterX;
        ycoo[z] = ycoo[z] + bbCenterY;

    }

}
公共作废移动(){
//更新精灵的位置。(工作)
x+=dx;
y+=dy;
bbx+=dx;
bby+=dy;
//更新边界框的位置。(工作)

对于(int i=0;i回答问题的标题-当精灵旋转时,边界框不会旋转

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

我不知道您正在使用的
java2d
包实现了什么,但它听起来确实像这样,并不像您希望的那样


也许边界框的渲染在某种程度上假定它是轴对齐的,因此当您使用未轴对齐的框呈现边界框时无法渲染,这让我想起了1970年我的商业艺术家叔叔告诉我的一个故事。他当时正在制作一个电视广告(用于卡车)一些最早的计算机图形。极客们首先让卡车车轮滚动到屏幕上,然后卡车车身下降到车轮上。然后车轮滚动离开,离开(哎呀!)卡车停在那里。他们在第二次拍摄时就正确了。不,很遗憾,我需要边界框来旋转,因为精灵必须旋转,边界框必须包含所有精灵,只有精灵。我希望我能使它成为一个轴对齐的矩形,这会让我更容易。当你看我的旋转代码时,你会这样做吗你看到什么问题了吗?