1

基本上,我被要求创建一个弹球游戏,将球发射到板上,用户可以控制脚蹼等以防止球撞击具有附加形状的吸收器,以充当保险杠以保持球在比赛中。

但是,我的碰撞遇到了一个小问题。用户可以单击板上的网格正方形以突出显示它,然后使用“添加正方形”按钮将一个高度为 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);
        }
    }

但是,当我运行程序时,球只是继续穿过正方形。我想我忽略了一些我似乎无法解决的关键细节,这就是我在这里的原因,所以任何帮助或指示都将不胜感激。

4

1 回答 1

0

你说你的正方形有 20 个单位的边长,我想这是你的常数的值,L但你的线段只有 1 的长度。尝试用1你的常数替换值L

于 2015-03-27T11:54:42.577 回答