Java GetBound使原始多边形位置不是最新的

时间:2016-07-31 01:18:32

标签: java collision-detection polygons

我正在使用GetBounds方法作为游戏碰撞检测的一部分,它正在做一些相当奇怪的事情。 GetBounds返回多边形原始位置的边界框,但不是我将其移动到的当前位置。这非常令人困惑,因为当我绘制多边形时,它出现在正确的位置。我觉得移动我的多边形可能会出错,所以我已经详细描述了我如何移动它。

我改变多边形位置的方法是修改数组" xpoints"和" ypoints"它们继承自类多边形。通过将多边形的所需位置添加到包含位于0,0的多边形的不同数组并替换该数组来修改xpoints和ypoints数组。

以下是代码:

Public Class Sword extends Polygon{

int[] SwordXPoints, SwordYPoints

public void main(int DesiredLocation){
for(int i = 0; i < super.ypoints.length; i++){
super.ypoints[i] = SwordXPoints + DesiredLocation;
}
for(int i = 0; i < super.xpoints.length; i++){
super.xpoints[i] = SwordYPoints + DesiredLocation;
}
}
}

我希望这种解释更容易理解和简单。

谢谢,山姆。

1 个答案:

答案 0 :(得分:0)

getBounds()的调用运行了这段代码:

if (bounds == null) {
    calculateBounds(xpoints, ypoints, npoints);
}
return bounds.getBounds();

第一次通过时,bounds为空,并调用calculateBounds。这将遍历您的点,计算最小和最大X和Y,并创建bounds。在后续调用中,bounds不为null,并返回缓存的值。

您需要做的是在完成所有积分更新后添加对invalidate()的调用。

或者,您可以使用AffineTransform更改Graphics2D的原点和比例,按原样绘制多边形,然后恢复原始原点和比例。粗略的调用顺序是:

AffineTransform origAT = g2.getTransform(); // Save original
AffineTransform newAT = new AffineTransform();
newAT.concatenate(origAT);
newAt.translate(newX, newY);
g2.setTransform(newAt);
g2.draw(polygon);
g2.setTransform(origAt); // restore original