Как сделать бильярд в Box2D и препятствовать тому, чтобы шары застряли на стенах?

Как быстрый обзор: я пытаюсь сделать игру в пул с помощью Box2D в качестве основания. Теперь мой вопрос:

Как я должен настроить бильярдные шары и края так, чтобы они обычно действовали? Шары иногда, кажется, придерживаются краев без видимой причины. У меня есть четыре статических стенных объекта с реституцией 1 вокруг краев таблицы.

Каждый шар имеет следующие свойства:

friction: 0.3
restitution: 0.3
density: 58.474822 (kg/m^2)
radius: 0.028575 (m)

и бильярдный шар имеет плотность 101,356358 (kg/m^2)

При применении импульса к сигналу 1.2 kg-m/s шар, кажется, перемещается на нормальной скорости шара пула и возвратах от стен главным образом правильно. Однако иногда, когда шар врезается в стену, он не возвращается прочь вообще, он просто останавливается или только продолжает перемещаться вдоль стены. Это выглядит странным и кажется неправильным. Существует ли лучший способ настроить это?

5
задан Ciro Santilli 新疆改造中心法轮功六四事件 7 December 2017 в 08:06
поделиться

1 ответ

Box2D лучше всего работает с единицами длины от 0,1 до 10 (метры, если хотите), и чем больше вы выйдете за этот диапазон, тем более уязвимыми становятся числовые неточности.

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

Прилипание также может быть вызвано тем, что тело засыпает, когда его скорость опускается ниже некоторого порога. Вы можете предотвратить это, установив для allowSleep значение false в структуре b2BodyDef. Но имейте в виду, что тела, которые никогда не ложатся спать, потребляют гораздо больше процессорного времени, чем тела, которые это делают, поэтому к этому следует подходить с осторожностью.

6
ответ дан 14 December 2019 в 13:27
поделиться
Другие вопросы по тегам:

Похожие вопросы: