Java - 旋转矩形以进行碰撞

时间:2013-01-14 23:45:05

标签: java rectangles

我正在使用Java Slick StateBaeedGame并希望为我的碰撞旋转我的矩形,我知道这可以使用Graphics或Graphics2D对象进行视觉目的,但不会修改矩形本身,最初列出的矩形用图形方法中的变量和调用不会旋转,这里的东西更清晰一些代码:

    java.awt.geom.Rectangle2D.Float rectTwo = new Rectangle2D.Float(460 + buckyPositionX, 50 + buckyPositionY, 100, 100);

public void render(GameContainer gc, StateBasedGame sbg, Graphics g) throws SlickException{
      worldMap.draw(buckyPositionX,buckyPositionY); //draw the map at 0,0 to start
      bucky.draw(shiftX,shiftY); //draw bucky at 320, 160 (center of the screen)


    g.rotate(460 + buckyPositionX, 50 + buckyPositionY, 40);
    g.fillRect((float)rectTwo.getX(), (float)rectTwo.getY(), (float)rectTwo.getWidth(), (float)rectTwo.getHeight());
      }

矩形rectTwo在我加载GUI时会显示为旋转,但实际上并没有旋转,如果我测试碰撞时矩形仍然是0度。

那么,如何让我的矩形变量改变它的角度?

1 个答案:

答案 0 :(得分:1)

一般情况下,你不能。

你可以做的是改变形状的路径......

PathIterator pathIterator = shape.getPathIterator(AffineTransform.getRotateInstance(Math.toRadians(33.5)));

这对您来说没什么用处,但您可以使用Path2D#append将路径追加回Shape对象...

GeneralPath path = new GeneralPath();
path.append(pathIterator, true);

这将允许你画它......

((Graphics2D)g).fill(path);

当然,这假定您的Graphics上下文是Graphics2D个实例。

这也意味着,您无法保持对Rectange2D的直接引用,但需要使用Shape