我正在使用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度。
那么,如何让我的矩形变量改变它的角度?
答案 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
。