2D виявлення зіткнення мотузки


13

Я хочу створити мотузку, яка може стикатися з об'єктами, як у наступному відео YouTube:

2D мотузка з фізики гри

Я думаю, що ви реалізуєте інтеграцію верлетів, яка використовує точки і з'єднує ці точки з лініями. Я намагаюся розібратися, який тип виявлення зіткнення ви застосували б до мотузки, щоб отримати ефект у відео.

Я думаю, що вам доведеться зробити якийсь компакт-диск до кожного пункту. Я хотів би використовувати box2D, тому мені цікаво, чи зробила б кожна точка жорсткою роботою кузова? Будь-яка порада буде вдячна.


1
Якщо ви уважно переглядаєте відео у своєму посиланні, то зрозуміло, що імітується «мотузка» - це насправді ланцюг, тобто велика кількість негнучких сегментів, з'єднаних у лінію, а не безперервно гнучка примітива. Це найбільш очевидно, коли мотузка обмотається навколо невеликої круглої перешкоди; ви можете бачити, як кути крутяться навколо нього. Ланцюг моделювати набагато, набагато простіше, ніж суцільну мотузку; кожне посилання є просто примітивним зіткненням, і вони постійно приєднані один до одного. Для більш переконливої ​​поведінки зробіть кожну ланку дуже жорсткою пружиною, а не повністю негнучкою.
Пол Z

Відповіді:


6

Оскільки ви використовуєте Box2D, ви можете створити ряд прямокутників і використовувати стики Box2D, щоб приєднатися до них. Там у вас є мотузка.

Щоб уникнути кутів, що вискакували зігнутою мотузкою, я можу уявити два варіанти:

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

Попередження: Я ніколи цього не пробував, але не бачу, як серія з'єднаних прямокутників може вийти з ладу, коли розміщене вами відео відображає практично одне і те ж саме.

Редагувати: Я щойно побачив PaulZ і зрозумів те саме. Іди, прочитай також його коментар до питання.


2

Швидкий Google кинув це сюди . Демонстрація, опис та код (у Flash), що використовує Box2D для реалізації простого канату. Мотузка стикається сама з собою і блоком у верхній частині сцени.


0

Ось що я зробив би, зробіть кожну точку на прямій колу, зробіть достатньо точок, які кола перекриваються. Зв'язуйте кожну точку з сусідом, а не зі стандартним зіткненням цей тетер повинен робити точки, що залишаються на певній відстані один від одного.

Я не знаю Box2D, але я думаю, що потрібна функціональність є.


0

Спочатку Box2D мав демонстрацію мотузки на мотузці з тонких коробок, з'єднаних з обмеженнями в точку; це було б чудовим місцем для початку (я не знаю, чи він все ще постачається з цією демонстрацією, але це було б просто відтворити).

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


0

Я пам’ятаю цю гру Allegro: Cupid , від SpeedHack 2002. Вона містить реалізацію для мотузок, які стикаються з пейзажем. Дивіться класи PhysParticles та HeartTrails у файлі heart_tails.cpp у його вихідному коді .

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.