Как сделать бильярд в Box2D и предотвратить застревание шаров на стенах? - PullRequest
5 голосов
/ 03 июня 2010

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

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

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

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

и биток имеет плотность 101,356358 (кг / м ^ 2)

При подаче импульса на кий 1,2 кг-м / с мяч, кажется, движется с нормальной скоростью пула и отскакивает от стен в основном правильно. Однако иногда, когда мяч попадает в стену, он совсем не отскакивает, он просто останавливается или просто продолжает двигаться вдоль стены. Это выглядит странно и кажется неправильным. Есть ли лучший способ настроить это?

1 Ответ

6 голосов
/ 29 июня 2010

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

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

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

...