Замедление объектов в box2d без гравитации - PullRequest
3 голосов
/ 20 января 2012

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

Пока шары имеют приличную скорость, они реально замедляются. Проблема начинается тогда, когда они сильно замедляются и собираются остановиться, но на самом деле не останавливаются в течение 4-5 секунд, и это выглядит очень нереально.

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

Может кто-нибудь придумать какое-нибудь другое решение?

Ответы [ 3 ]

3 голосов
/ 20 января 2012

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

3 голосов
/ 20 января 2012

Попробуйте использовать параметр линейного демпфирования b2Body:

body->SetLinearDamping(0.1f);
1 голос
/ 09 июня 2012

Если вы делаете многопользовательскую игру, вам нужен судья, чтобы убедиться в отсутствии несоответствий. Хост может быть либо сервером, к которому подключаются оба клиента, либо одним (или обоими) клиентами.

Важно то, что каждый выстрел рассчитывается и отправляется обеим сторонам, прежде чем он будет показан. Так как бильярд пошаговый. Каждый клиент может разместить свой собственный выстрел и отправить результат для «воспроизведения» в экземпляре игры противника. Также это означает, что задержка не должна быть слишком большой проблемой, поэтому вы можете посылать кадр за кадром позиции шариков (хотя это не оптимально, это проще всего реализовать).

Если вам нужно что-то, что вы можете использовать для подключения без необходимости настройки сервера, взгляните на pubnub (http://www.pubnub.com/). Настройка и разработка учетной записи бесплатны, и ее относительно легко настроить.

Надеюсь, это поможет! ^^

...