Веб-работники для симуляции физики игры HTML5?

12

Немного связано с этим вопросом .

Идея состоит в том, чтобы гарантировать такое же физическое поведение в максимально возможной степени. Можно ли запустить физику с фиксированным шагом по времени для веб-работника? Пользовательский интерфейс будет обновляться с другой / переменной частотой обновления.

Кто-нибудь еще пробовал такое?

Петтери Хиетавирта
источник
Что вы можете получить, используя веб-работника? Пока мой ответ будет таким: это сработает, но зачем?
аааааааааааа

Ответы:

3

Я нашел этот эксперимент . Он запускает физику Box2d на веб-работника. Я еще не проверил подробно, как это обойти проблемы, упомянутые в комментариях Винсента Шейба.

Петтери Хиетавирта
источник
Хороший эксперимент. Я следил за этими типами проектов тоже. К сожалению, большинство из них все еще связаны с Java / C. Я считаю, что OP ищет способ осуществить это в браузере (без плагинов).
Кевин Пено
2
Статья о том же самом от парня из Google: t.co/AuhPptB
sorenbs
2

Это может сработать, однако, WebWorkerследуя шаблону наблюдателя , document(html-страница, которой принадлежит работник) может только слушать и отправлять сообщения работнику. От этого, я думаю, есть несколько вариантов. Во всех случаях, я думаю, вам нужно будет найти способ определить оптимальный FPS пользовательского агента для оптимизации информации. Тогда вы можете либо:

  • Скажите работникам, чтобы отправлять сообщения в эти промежутки времени
    • Недостаток (ы): вы должны предположить, что documentбудет готов к ответу, когда это произойдет.
  • Скажите, documentчтобы работник отправлял сообщение с запросом физики через определенный промежуток времени x, а затем работник вскоре после этого отправит ответ (надеюсь).
    • Недостаток (ы): поскольку все сообщения и ответы являются асинхронными, между запросом и ответом работника могут быть задержки. В этом случае вам также придется обнулить onmessageсобытие, чтобы documentоно не слушалось, когда оно не ожидается.

Я уверен, что есть другие вещи, которые я пропустил, или способы справиться с коммуникациями. Я буду с нетерпением ждать других ответов на эту тему сам!

Кевин Пено
источник
1
а) Осторожно относительно производительности! Рассмотрите requestAnimationFrame и подайте сигнал «оставьте в живых» своему работнику, чтобы вы не сжигали процессор, если вкладка находится в фоновом режиме (возможно, слишком долго)
Винсент Шейб,
б) IIRC Все сообщения от работника будут получены в главном потоке, они будут поставлены в очередь. Подумайте, какое влияние это окажет на ваш основной поток, если вы получили 5 обновлений, но вам нужны только последние обновления. Вы также не можете сказать, что у вас есть больше.
Винсент Шейб
в) Все сообщения делают копии данных. Чем больше данных вы будете отправлять между потоками, тем больше копирование данных и работа по сбору мусора. Таким образом, выигрыш здесь будет существовать только при высоком соотношении вычислений / сообщений.
Винсент Шейб
@ Vincent, относительно B), поэтому я сказал, что вам нужно либо documentвсегда быть готовым, найдя разумный fps, либо перейти к варианту 2, где работник ничего не делает, пока не documentпопросит об этом.
Кевин Пено
2

Physijs использует веб-работника. Он склеивает физику боеприпасов с объектами Three.js и обновляет их по мере необходимости. Я полагаю, что он имеет фиксированные и плавные временные шаги

ebaum
источник