после многих попыток я пошел с box2d.
Есть всего два подхода к этому моделированию или, по крайней мере, я нашел 2:
- Один из них состоит в том, чтобы использовать несколько круговых форм и соединять их, используя отдаленные соединения.
- а другой должен прямоугольники для самой цепи, а затем прикрепить их с помощью вращающихся соединений
в каждом сенарио у вас должен быть якорь (который в моем случае был статическим блоком). лучше, если вы уменьшите вес частей веревки (либо вы будете использовать форму круга или форму прямоугольника), например, чтобы получить более реалистичную физику, я установил их плотность на 0,1, а для коробки, соединенной на конце веревки, я использовал плотность 10.
Другое дело, что вам нужно беспокоиться о том, как ваш сегмент веревки реагирует друг на друга. я просто хотел, чтобы моя веревка свободно двигалась в сцене, поэтому я обозначил все крепления веревки как датчики. вам может понадобиться другой подход.
следующая вещь, о которой вам нужно беспокоиться, это количество итераций, которые вы вставляете в обновление для мира: для низкого сегмента веревки (возможно, максимум 8) нет необходимости использовать высокое значение итерации, например 10/10, который предложил сам box2d. этого достаточно, но если вы увеличите число сегментов, например, я попробовал 30 сегментов, при небольшом количестве итераций ваша веревка, кажется, увеличивает свою длину больше, чем должна, поэтому вам, возможно, потребуется около 40/40 итераций для решения этих ситуаций.
после некоторого тестирования кажется, что коробка 2d предназначена для сцен с размерами объектов от 0,1 до 10 м, а максимальный размер, рекомендуемый для больших сцен, составляет около 50 х 50 м. так что по сути вам нужно уменьшить ваш объект, чтобы соответствовать этим параметрам. в моем случае я сначала попытался передать положения пикселей непосредственно в box2d, но казалось, что существуют некоторые ограничения скорости, мешающие миру двигаться так быстро, как следовало, поэтому мне пришлось масштабировать свою сцену примерно в 64 раза, чтобы получить лучшие результаты. хотя я не проверял себя, в box2d есть некоторые ограничения, которые мешают вам использовать большие сцены. например, в b2Setting.h
файле есть определенное значение, #define b2_maxTranslation 2.0f
вы можете изменить настройки box2d, но это не рекомендуется.