Обнаружение столкновения мяча с добавленным пользователем квадратом

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);
        }
    }

Однако, когда я запускаю программу, мяч просто проходит через квадрат. Я думаю, что упускаю из виду некоторые ключевые детали, которые я, похоже, не могу решить, поэтому я здесь, поэтому любая помощь или указатели на всех будет оценена по достоинству.

  • 0
    Можете ли вы привести минимальный рабочий пример?
  • 0
    Похоже, Gizmoball?
Показать ещё 1 комментарий
Теги:
collision-detection
square

1 ответ

0

Вы говорите, что ваш квадрат имеет боковые длины в 20 единиц, что, я полагаю, является значением вашей константы L но ваши сегменты линии имеют длину 1. Попробуйте заменить значения 1 на константу L

Ещё вопросы

Сообщество Overcoder
Наверх
Меню