2D обнаружение столкновения веревки

13

Я хочу создать веревку, которая может сталкиваться с объектами, как в следующем видео на YouTube:

2D Game Physics Rope

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

Я думаю, что вам придется сделать несколько компакт-дисков для каждой точки. Я хотел бы использовать box2D, поэтому мне интересно, чтобы каждая точка работала с твердым телом? Любой совет будет принят во внимание.

Джои Грин
источник
1
Если вы внимательно посмотрите видео по вашей ссылке, то станет ясно, что моделируемая «веревка» на самом деле представляет собой цепочку, то есть большое количество негибких сегментов, соединенных линией, а не непрерывно гибкого примитива. Это наиболее очевидно, когда веревка обвивает небольшое круглое препятствие; Вы можете видеть, как углы вращаются вокруг него. Цепь гораздо, гораздо проще моделировать, чем непрерывную веревку; каждая ссылка является просто примитивом столкновения, и они постоянно связаны друг с другом. Для более убедительного поведения сделайте каждую ссылку очень жесткой пружиной, а не полностью негибкой.
Пол Z

Ответы:

6

Поскольку вы используете Box2D, вы можете создать серию прямоугольников и использовать соединения Box2D для их соединения. Там у вас есть веревка.

Чтобы избежать высовывания углов из изогнутой веревки, я могу представить два варианта:

  1. Дайте вашим отрезкам веревки закругленные концы (чтобы они больше не были прямоугольниками)
  2. Сделайте эту веревку невидимой и используйте ее только для физики. Займите положение суставов в каждом кадре и используйте его, чтобы нарисовать на лету веревку, которую увидит игрок .

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

Изменить: я только что видел PaulZ, и я понял то же самое. Иди прочитай его комментарий по этому вопросу.

doppelgreener
источник
2

Быстрый Google бросил это здесь . Демонстрация, описание и код (во Flash) с использованием Box2D для реализации простой веревки. Веревка сталкивается с собой и блоком в верхней части сцены.

Роджер Перкинс
источник
0

Вот что я хотел бы сделать, сделать каждую точку на окружности кругом, сделать так, чтобы окружности перекрывались. Привязывайте каждую точку к своему соседу, а не к обычному столкновению. Эта привязь должна удерживать точки на фиксированном расстоянии друг от друга.

Я не знаю Box2D, но я предполагаю, что необходимая функциональность есть.

AAAAAAAAAAAA
источник
0

Изначально у Box2D была демонстрация веревочного моста, сделанная из тонких коробок, соединенных с ограничениями точка-точка; это было бы хорошим местом для начала (я не знаю, будет ли оно все еще выпущено с этой демонстрацией, но было бы просто воссоздать его).

Достаточно просто реализовать веревку в виде частиц с ограничениями расстояния независимо от симулятора твердого тела (как вы упоминаете, используя схему интеграции и решения ограничений Verlet, подобную той, которая описана в этой статье: http://www.gamasutra.com/resource_guide/ 20030121 / jacobson_pfv.htm ), но если вы хотите, чтобы твердые тела реагировали на вашу веревку (как в видео, с висящей коробкой), то это становится намного сложнее. Я бы начал с всеобъемлющего набора инструментов, таких как Box2D, и работал бы задом наперед, а не пытался бы строить из частиц.

boat365
источник
0

Я помню эту игру Allegro: Cupid , от SpeedHack 2002. Она содержит реализацию веревок, которые сталкиваются с пейзажем. См. Классы PhysParticles и HeartTrails в файле heart_tails.cpp в его исходном коде .

dacap
источник