Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/393.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用用户添加的正方形检测球碰撞_Java_Collision Detection_Line Segment - Fatal编程技术网

Java 使用用户添加的正方形检测球碰撞

Java 使用用户添加的正方形检测球碰撞,java,collision-detection,line-segment,Java,Collision Detection,Line Segment,基本上,我已经被要求创建一个弹球游戏,将一个球发射到一个棋盘上,用户可以控制脚蹼等,以防止球撞到吸收体上,并添加形状作为保险杠,以保持球在运动中 然而,我遇到了一个小问题,我的碰撞。用户可以单击电路板上的网格正方形将其高亮显示,然后使用“添加正方形”按钮将高度为20、宽度为20的正方形添加到高亮显示的正方形,并返回其(x,y)位置 public void addASquare(Point p) { System.out.println("Add square to point: " +

基本上,我已经被要求创建一个弹球游戏,将一个球发射到一个棋盘上,用户可以控制脚蹼等,以防止球撞到吸收体上,并添加形状作为保险杠,以保持球在运动中

然而,我遇到了一个小问题,我的碰撞。用户可以单击电路板上的网格正方形将其高亮显示,然后使用“添加正方形”按钮将高度为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;
}
public ArrayList getLineSeg(){
ArrayList行=新的ArrayList();
线段l1=新线段(x,y,x+1,y);//顶部
线段l2=新线段(x,y+1,x+1,y+1);//底部
线段l3=新线段(x,y,x,y+1);//左
线段l4=新线段(x+1,y,x+1,y+1);//右
行。添加(l1);
行。添加(l2);
行。添加(l3);
行。添加(l4);
回流线;
}
…这是当球撞到广场两侧时碰撞检测的代码

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);
        }
    }
ArrayList lseg=sq.getLineSeg();
对于(线段直线:lseg){
时间=几何体。时间直到球碰撞(线、球、,
速度);
如果(时间<最小时间){
最小时间=时间;
newVelocity=Geometry.reflectWall(线,球,getVelocity(),1.0);
返回新的碰撞详细信息(minimumTime、newVelocity);
}
}

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

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

您能提供一个最简单的工作示例吗?听起来像Gizmoball?是的,它是Gizmoball@KonradHöffner我将很快发布一个最小的工作示例,我目前正在工作,只能访问这些片段。