2015-06-05 6 views
3

Я пишу Android-игру с помощью LibGDX и Box2D. Я планирую добавить к нему многопользовательскую функцию пошаговой настройки.Является ли Box2D совершенно детерминированным?

Теперь, если на обоих клиентах я нахожусь в мире Box2D с той же скоростью с одинаковыми временными шагами, и я запускаю симуляцию на обоих клиентах с теми же начальными параметрами, когда симуляции закончены, будет конечное состояние оба моделирования должны быть одинаковыми? Другими словами, моделирование Box2D отлично детерминировано?

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

+0

возможно дубликат (http://stackoverflow.com/questions/23038132/does-box2d-physics-rely- on-the framerate) – JeanLuc

+1

@JeanLuc Вопрос о том, что сообщение имеет такую ​​же озабоченность, но с точки зрения разных скоростей кадров. Ответ на это - «Нет». Мой вопрос уже устанавливает, что будет использоваться фиксированная частота кадров. Будут ли тогда моделирование детерминированным? – AxiomaticNexus

ответ

2

Осмотревшись, ответ «Нет», даже если используются одинаковые шаги! Причина этого ответа связана с тем, как математика с плавающей запятой реализована во многих компиляторах и процессорах. Небольшие расхождения в каждом цикле складываются, что приводит к значительному различному моделированию.

0

Официальный FAQ цитата

Официальный FAQ теперь цитату, что подтверждает то, что вы вывели https://github.com/erincatto/Box2D/wiki/FAQ/933830ba42bce329a6697212050da00c383f1e79:

#Determinism ## Является ли Box2D детерминированным? Для того же входа и того же двоичного кода Box2D будет воспроизводить любую симуляцию. Box2D не использует никаких случайных чисел и не основывает никаких вычислений на случайных событиях (таких как таймеры и т. Д.).

Однако люди часто хотят более жесткого детерминизма. Люди часто хотят знать, могут ли Box2D получать одинаковые результаты в разных двоичных файлах и на разных платформах. Ответ - нет. Причина этого ответа связана с тем, как математика с плавающей запятой реализована во многих компиляторах и процессорах. Я рекомендую прочитать эту статью, если вам интересно: [? Имеют ли Box2D физики полагаться на фреймрейт] http://www.yosefk.com/blog/consistency-how-to-defeat-the-purpose-of-ieee-floating-point.html

Смежные вопросы