Многопользовательская чтения в JavaScript для разработки игры

StackOverflow https://stackoverflow.com/questions/6349327

Вопрос

Я думаю о разработке игры в Pure JavaScript и HTML5, без использования каких -либо сторонних плагинов. Проблема, с которой я сталкиваюсь, заключается в том, что я не могу найти способ отделить различные «модули» игры на отдельные потоки, такие как рендеринга, логика игры, загрузка активов и так далее.

Веб -работники, кажется, могут разделить код на разные потоки, но проблема с ними заключается в ограниченной информации, которую я могу передать между ними. Например, для рендеринга мне нужно передать весь «мир» со всеми сущностями, сетками, текстурами и т. Д. Для каждого обновления игры, потому что рабочие потоки не могут делиться памятью. Он может быть оптимизирован, например, отправка статических объектов только при инициализации (сетки, текстуры), а затем отправить только состояние объекта при обновлении (это мировое преобразование), но это все еще не желательно.

Есть ли способ отправить большие данные между ними или поделиться некоторыми объектами? Или есть другой метод, полностью достигающий истинного многопоточного чтения? Я знаю, что есть более простые способы достижения этого с использованием плагинов/ передач, но мне нужно использовать только методы, доступные в открытом Интернете;

Это было полезно?

Решение

Веб -работник JavaScript в некотором роде является лучшей параллельной моделью программирования. Например, это предназначено для событий, и нет общего объекта. Это означает, что вы не можете попасть в блокировку сетки (потому что блокировки вообще нет), и объект не может попасть в неверное состояние, будучи измененным двумя потоками одновременно.

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

Другие советы

Вы, вероятно, хотите изучить веб -работников, у меня нет опыта с ними, но слышал о них. Может привести вас в правильное направление.

http://ejohn.org/blog/web-workers/

веб-работники самая близкая вещь к многопоточному чтению в JS.
В данный момент.
Полная остановка.

Без веб -работников нет реального способа выполнить многопоточный в JavaScript, который я знаю.

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

Так что для петли тоже было бы временное состояние ...

//Loop over some iterator, exit if time is up
for (i = 1; i < max || timeNotUp(); i++)
{
}

//If exiting normally 
if (i == max)
{ //do somthing
}
//otherwise, save state
else
{
    this.i = i;
    this.otherStuff = otherStuff;
}

Вы можете определенно расставить приоритеты в своем коде таким образом. Но есть недостатки. Сохранение вашего состояния не приводит к чистоту простых для следования кода (особенно с петлями в петях). Это также не так быстро, так как вы постоянно проверяете время и сохранение состояний.

Я рекомендую функциональный подход для составления аспектов вашей игры. Смотрите, например http://www.flapjax-lang.org.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top