В основном меня попросили создать игру в пинбол, которая запускает мяч на доску, и пользователь может контролировать ласты и т. Д., Чтобы мяч не попадал в поглотитель с добавленными фигурами, чтобы действовать как бамперы, чтобы держать мяч в игре.Обнаружение столкновения с мячом с добавленным пользователем квадратом
Однако я столкнулся с небольшой проблемой с моими столкновениями. Пользователь может щелкнуть квадрат сетки на доске, чтобы выделить его, а затем использовать кнопку «Добавить квадрат», чтобы добавить квадрат высоты 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);
}
После того, как это сделано, я затем добавить сегментов линии, квадрата, используя (х, у) координаты с использованием добавления площади, чтобы подготовиться к обнаружению столкновения с мячом.
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);
}
}
Однако, когда я запускаю программу, мяч просто проходит по площади. Я думаю, что упускаю из виду некоторые ключевые детали, которые я, похоже, не могу решить, поэтому я здесь, поэтому любая помощь или указатели на всех будет оценена по достоинству.
Можете ли вы предоставить минимальный рабочий пример? –
Звучит как Gizmoball? –
Да, это Gizmoball. @ KonradHöffner Я скоро опубликую минимальный рабочий пример, я сейчас работаю и имею доступ только к этим фрагментам. – user3410327