我正在使用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;
}
}
}
我希望这种解释更容易理解和简单。
谢谢,山姆。答案 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