Как сделать многопользовательскую игру js

Добавил пользователь Евгений Кузнецов
Обновлено: 10.09.2024

Хотите улучшить этот вопрос? Обновите вопрос, чтобы он соответствовал теме разработки игр для Stack Exchange.

Закрыто 2 года назад .

Мне интересно, если объединение клиентской части Javascript с серверной стороной PHP / mysql является хорошей идеей для многопользовательских (небольших) браузерных игр HTML5 в реальном времени?

Мои технические знания очень ограничены, и, хотя я планирую изучать node.js в будущем, кривая обучения сейчас довольно велика.

Поскольку я уже знаком с PHP, я чувствую, что он заработал бы намного быстрее.

Значения, которые я намерен хранить / обрабатывать:

  • Имя игрока и ID.
  • X и Y позиции.
  • Здоровье.
  • Оборудованные предметы (максимум 8 слотов, возможно меньше).
  • Действия (ходьба, атака, использование и т.д., но только 1 действие / игрок за один раз).
  • Пуля X, Y координаты и траектория.
  • Название гильдии / клана.
  • И некоторые основные функции чата / рассылки.

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

Звучит вполне выполнимо. Почему бы тебе просто не попробовать? В худшем случае, вы тратите некоторое время на изучение, в лучшем случае вы получаете именно то, что хотите.

Да, но я думаю, что это займет некоторое время, и я не люблю тратить время, вот почему я спросил здесь. =)

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

Для игры в реальном времени вы хотите минимизировать задержку. Вот два совета для достижения этого, с примечаниями о PHP и Node:

  1. Используйте WebSockets. Они обеспечивают быструю двустороннюю связь между сервером и клиентом. Преимущество использования node.js в том, что вы можете использовать один и тот же API-интерфейс JavaScript на обоих концах канала. Есть также замечательный модуль socket.io для node.js, который предоставляет резервные технологии для небольших браузеров, которые не поддерживают WebSockets. Погуглив немного, кажется, вы также можете использовать WebSockets из PHP, если вы действительно этого хотите.
  2. Не включайте базу данных в критичные по времени данные, такие как координаты быстро движущихся объектов. Это означает, что они должны храниться в памяти, что не очень хорошо подходит для традиционной модели использования PHP, когда он запускается один раз для каждого запроса к Apache (или любого другого веб-сервера), но вы можете запустить свое приложение PHP-сервера также как автономное. Я предполагаю, что Node с его ядром V8 будет работать быстрее, чем PHP . Вопрос в том, насколько требовательна ваша игра и насколько мощен сервер.

Я сам нахожу, что node.js очень легко подобрать, и, так как вам все равно понадобится код JavaScript, я бы порекомендовал вам попробовать. По крайней мере, взгляните на руководства по socket.io, чтобы увидеть, как просто настроить канал связи в реальном времени.

+1 за точку 2. Самая большая ошибка, которую вы можете сделать с этим, - ожидать, что запросы MySQL будут срабатывать при каждом событии. Все, что вы можете сделать, чтобы удалить данные игры с жесткого диска, поможет. Я имел успех с злоупотреблением Memcached для этого. Есть, несомненно, другие пути.

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

Узел совсем не сложно запустить или использовать. Да, сложнее, чем PHP, но PHP платит ужасную цену за его удобство - дизайн, позволяющий встроить его в Apache и по умолчанию везде без настройки, также вызывает множество проблем, которые делают PHP совершенно и абсолютно худшим выбором для вас. может сделать в режиме реального времени игровой сервер. Node, Python, Ruby, Java и т. Д. Требуют, чтобы вы настроили сервер приложений, но эта модель позволяет очень масштабируемую управляемую событиями обработку в памяти, которую в PHP практически невозможно достичь.

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

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

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

Я рекомендую изучать Nodejs. Если вы уже сейчас Javascript, это не будет так сложно. Я быстро создал многопользовательскую игру TRON с Nodejs, и это был мой первый день, когда я ее использовал. (О, и клиент был холстом HTML5; я только отправлял ввод с клавиатуры, как упомянуто в других комментариях.)

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

Многопользовательская игра
В многопользовательской игре Agar.io игроки управляют бактериями. У каждой бактерии есть размер —.

Многопользовательская игра
Здравствуйте, Я создал игру на FLASH, но играть может только один человек. То есть каждый.

Многопользовательская игра на php
Доброго времени суток! Хотелось бы услышать ваши советы по поводу создания сайта с.

Ответ на оба вопроса: Вебсокеты

Многопользовательская игра домино
Всем доброго дня. Сори, если вопрос не туда написал. Интересует следующие, есть задание, нужно.


Многопользовательская игра Agar.io
В многопользовательской игре Agar.io игроки управляют бактериями. У каждой бактерии есть размер —.

Многопользовательская игра не через networkmanager
Ребят кто нибудь делал игру на Unity не через networkmanager, а к примеру через networkServer и.


Многопользовательская игра, определить какие из игроков имеют возможность выиграть
В многопользовательской игре Agar.io игроки управляют бактериями. У каждой бактерии есть размер —.

Сегодня игрушку можно наваять на любом ЯП, и JS не исключение. Разработка игр по своей природе сложная задача – мы подскажем, с чего начать.

Разработка игр на JavaScript: реально и безболезненно

Масса людей думает, что все крутые игры (God Of War, Assassin's Creed, Skyrim, добавь по вкусу) созданы на C++. Это отчасти так. В проекте принимают участие сотни специалистов из разных отраслей, в том числе и разработчики, юзающие другой язык – обычная распространенная практика.

Некоторые классные игры написаны на “непопулярных” языках программирования, и это нормально. Если ты работаешь с JavaScript, то не нужно после этой статьи бросаться изучать “плюсы”, оставайся с JavaScript.

Существуют Unity, Unreal Engine, CryEngine и прочие классные решения для создания игрушек, и если тебе удобно развлекаться с ними – пожалуйста. Поэтому нет никакой разницы, на чем ты будешь кодить, но в нашем случае речь пойдет о JS-фреймворках.

Прежде чем мы перейдем к рассмотрению фреймворков для создания игр, следует изучить существующие технологии. Один из вариантов – HTML5. Начиная с 5-й версии спецификации, HTML возымел тег , который позволяет создавать контекст для рисования на веб-странице.

Не нужно забывать о творении команды Khronos Group. WebGL – это веб-версия спецификации OpenGL ES, позволяющая разработчикам общаться с видеокартой через браузер (поверь, лучше не знать, как это работает).

Таким образом, можно создавать 2D и 3D сцены на GPU (что эффективнее, чем на CPU). Супер! Но если взглянуть на код JavaScript, использующий эти технологии, тебе поплохеет.

Поэтому давай разбираться с фреймворками, оберегающими нас от canvas и абстрагирующими от WebGL.

Разработка игр на JavaScript: реально и безболезненно

PixiJS

Этот инструмент можно назвать 2D-рендером WebGL. Это означает, что данная библиотека включает в себя множество функций, предназначенных для эффективной отрисовки 2D-сцен и объектов. Так проще сосредоточиться на создании программного кода, а хардкорные “низкоуровневые” вещи оставить разработчикам PixiJS.

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

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

ExcaliburJS

Здесь у нас полноценный игровой фреймворк, написанный на Typescript. Полная система сцен и камер, спрайты и анимации, звуки, физика и т. д. – все, что пожелаешь. Многим очень нравится API, предоставляемый ExcaliburJS, т. к. с ним уютнее.

Это связано с тем, что создатели продукта из мира веб (некоторые являются веб-разработчиками, другие — DevOps), поэтому большинство шаблонов и подходов – это штуки, которые уже популярны в веб-разработке. Если тебе близка веб-разработка, попробуй этот инструмент.

ImpactJS

ImpactJS начал свой путь со звания “Первый фреймворк для веб-игр”. Большинство фреймворков, рассмотренных ранее, были просто экспериментами, а не коммерческим продуктом. Этот опенсорсный претендент распространяется бесплатно и поставляется с хорошим редактором уровней.

Фреймворк не является самым понятным или документированным, но его надежность уже доказана. Например, разрабы из CrossCode взяли за основу форкнутую версию Impact для своего движка за его производительность и способность масштабироваться под конкретную задачу.

CreateJS

CreateJS – это набор модульных библиотек и HTML5-инструментов, работающих асинхронно или параллельно в зависимости от ситуации.

Инструмент предоставляет все, что нужно для создания игры с нуля, с помощью отдельного модуля языка JavaScript. Например, для рендеринга можно взять PixiJS, а для работы со звуковыми материалами SoundJS и т. д.

PhaserJS

И напоследок самый популярный – PhaserJS. Это мощный набор инструментов для создания веб и мобильных игр. Этот фреймворк имеет огромное и активное сообщество – каждую неделю эти ребята выкладывают много новых статей, демо и туториалов, основанных на PhaserJS. Это обеспечивает отличное подспорье для людей, делающих свои первые шаги в геймдеве и нуждающихся в наставлениях. А еще, начиная с 3-й версии, это один из самых производительных игровых фреймворков.

Разработка игр на JavaScript: реально и безболезненно

ThreeJS

ThreeJs – самая популярная 3D-библиотека. Она предлагает наборы функций для выполнения общих операций, которые должны происходить в 3D-сцене. Все мероприятия происходят на более высоком уровне, чем raw WebGL, и не надо заморачиваться с горой низкоуровневых действий.

BabylonJS

Этот фреймворк похож на предыдущий, но имеются различия:

  • API меняется каждые 3 месяца, что помогает при поиске старых решений в интернете;
  • активное и полезное сообщество;
  • продуктивные и отзывчивые разработчики (у Three.js самый старый баг на GitHub датируется 2013 годом, в Babylon.js отмечен два дня назад);
  • The playground – это отличный инструмент для быстрого “опробования” кода, объяснения проблемы и оказания помощи.

Как в любом уважающем себя мануале, далее идет подборочка книг по теме.

Кстати, у нас есть очень крутая статья по книгам для геймдэва – рекомендуем!

Мы подобрали для тебя литературу по базовым вещам. Когда определишься, какая ветка игровой разработки тебе больше нравится, будет легче подбирать книги JavaScript.

В этом пошаговом руководстве мы создадим простую игру MDN Breakout, написанную на чистом JavaScript и отрендеренную на HTML5 .

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

Для извлечения максимальной пользы из этой серии статей необходимо иметь средние (или хотя бы базовые) знания языка JavaScript. После прохождения этого урока вы сможете создавать собственные простые браузерные игры.

Gameplay screen from the game MDN Breakout where you can use your paddle to bounce the ball and destroy the brick field, with keeping the score and lives.

Детали к урокам

Все уроки и версии игры MDN Breakout доступны в GitHub:

Примечание. Если вам интересно узнать о разработке двухмерных игр с помощью игровой библиотеки, ознакомьтесь с альтернативной серией статей 2D игра Breakout с использованием Phaser.

Примечание. Эту серию статей можно использовать как материал для практических занятий по разработке игр. Также можно воспользоваться набором инструментов Gamedev Canvas Content Kit, основанном на этом уроке, если нужно сделать доклад о разработке игр в целом.

Следующий шаг

Ладно, давайте начнём! Перейдите к первой главе — Создание Canvas и рисование на нем.

Читайте также: