Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/383.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用二维对象旋转边界框_Java_User Interface_2d_Collision Detection - Fatal编程技术网

Java 使用二维对象旋转边界框

Java 使用二维对象旋转边界框,java,user-interface,2d,collision-detection,Java,User Interface,2d,Collision Detection,对于我正在编程的一个游戏,我有一个飞船对象,它绕着它的机头旋转(不是飞船的中心)。边界框应该随之旋转以保持一致的命中检测,但我似乎无法让它工作。以下是我所拥有的: if(ship.isAlive()) { g2d.setTransform(identity); g2d.translate(ship.getX(), ship.getY()); g2d.rotate(Math.toRadians(ship.getFaceAngle()));

对于我正在编程的一个游戏,我有一个飞船对象,它绕着它的机头旋转(不是飞船的中心)。边界框应该随之旋转以保持一致的命中检测,但我似乎无法让它工作。以下是我所拥有的:

if(ship.isAlive())
    {
        g2d.setTransform(identity);
        g2d.translate(ship.getX(), ship.getY());
        g2d.rotate(Math.toRadians(ship.getFaceAngle()));
        g2d.setColor(Color.WHITE);
        g2d.fill(ship.getShape());
        g2d.setColor(Color.RED);
        g2d.draw(ship.getShape());

        //draw bounding rectangle around ship
        if (showBounds) 
        {
            g2d.setTransform(identity);
            g2d.setColor(Color.BLUE);
            g2d.draw(ship.getBounds());

        }
    }

我想有些信息不见了。例如,我不知道什么是
g2d
。它是渲染器API吗?我想知道为什么你必须设置
g2d
的变换来渲染船的形状,但是你没有为边界框设置它。您是否尝试过简单地删除行
g2d.setTransform(identity)
在您的if条件下?g2d是我用来在窗口中绘制东西的Graphics2D变量。当我从第一部分删除g2d.setTransform(identity)时没关系,但是如果我从第二部分删除它,它根本不会绘制,至少不会在屏幕上绘制。我想知道为什么你的程序在删除线条时不应该绘制,而它会绘制其他内容。总的来说,我认为我对你的比赛和你的问题了解不够,无法回答你的问题。应该
ship.getBounds()
返回什么。它是位于正确位置的
矩形的一个实例,还是仅仅是
ship.getShape().getBounds()的结果?你是只在原点不是中心的情况下才有问题,还是在其他情况下也有问题?您的问题是在命中检测时长方体位于错误的位置,还是在错误的位置渲染?ship.getBounds()只返回一个矩形,该矩形设置为船舶的相同大小(大致相同),直接位于船舶顶部,并在第一次创建时正确对齐。然而,一旦你旋转船,它就不在直线上了。这个盒子确实能够正确地进行命中检测,但由于它没有与飞船对齐,所以它不能按预期工作。游戏是一个小行星类型的游戏,为了安全起见:
ship.getBounds()
应该在正确的位置返回一个
矩形。在使用
ship.getShape()
时,您没有设置正确的位置?在这种情况下,您必须在更改船舶的位置或旋转时更新边界框。例如,当您调用
ship.setX(…)
或类似的东西时。因为我没有看到你代码的这一部分,所以我不能说任何关于它的事情。渲染代码对我来说似乎是正确的。但需要注意的是:
java.awt.Rectangle
是一个轴对齐的边界框(AABB)。这意味着你不能简单地旋转它。