基本上我被要求创建一个弹球游戏,将球射到棋盘上,用户可以控制脚蹼等以防止球撞击吸收器,增加形状作为保险杠以保持球在比赛中。
然而,我遇到了一些碰撞问题。用户可以单击电路板上的网格方框以突出显示它,然后使用“添加方块”'按钮,将高度为20和宽度为20的正方形添加到突出显示的方块,同时返回其(x,y)位置。
public void addASquare(Point p) {
System.out.println("Add square to point: " + p.x + ", " + p.y);
Square square = new Square(p.x, p.y, L, L);
bumperList.add(square);
setChanged();
notifyObservers(bumperList);
}
有一次,这已经完成了,然后使用(x,y)坐标将线段添加到方块中,使用添加方块来准备用球进行碰撞检测。
public ArrayList<LineSegment> getLineSeg() {
ArrayList<LineSegment> lines = new ArrayList<LineSegment>();
LineSegment l1 = new LineSegment(x, y, x + 1, y); // top
LineSegment l2 = new LineSegment(x, y + 1, x + 1, y + 1); // bottom
LineSegment l3 = new LineSegment(x, y, x, y + 1); // left
LineSegment l4 = new LineSegment(x + 1, y, x + 1, y + 1); // right
lines.add(l1);
lines.add(l2);
lines.add(l3);
lines.add(l4);
return lines;
}
..这是当球击中正方形两侧时碰撞检测的代码。
ArrayList<LineSegment> lseg = sq.getLineSeg();
for (LineSegment line : lseg) {
time = Geometry.timeUntilWallCollision(line, ball,
velocity);
if (time < minimumTime) {
minimumTime = time;
newVelocity = Geometry.reflectWall(line, ball.getVelocity(), 1.0);
return new CollisionDetails(minimumTime, newVelocity);
}
}
然而,当我运行程序时,球只是通过广场继续进行。我想我忽略了一些我似乎无法解决的关键细节,这就是为什么我在这里,所以任何帮助或指针都会非常感激。
答案 0 :(得分:0)
你说你的方块有20个单位的边长,我想这是你的常数L
的值,但你的线段的长度只有1.尝试用你的1
替换L
的值常数{{1}}。