2015-03-27 2 views
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); 
} 

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

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? –

+0

Да, это Gizmoball. @ KonradHöffner Я скоро опубликую минимальный рабочий пример, я сейчас работаю и имею доступ только к этим фрагментам. – user3410327

ответ

0

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

Смежные вопросы