Самый эффективный способ построить карту мира для HTML-игры - PullRequest
0 голосов
/ 02 июня 2019

У меня есть проект многопользовательской кооперативной игры, и моя главная задача - игровая карта.

Немного контекста

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

Вопрос

Какой эффективный способ сделать это?

  • Классический массив хранится на стороне сервера и обновляет этот массив, когда пользователь выполняет действие? Разве это не потребляет много ресурсов процессора на стороне клиента при построении карты из этого массива? (изображение карты? <map></map>)
  • Использовать игровой «движок», такой как gdevelop или babylonjs ?

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

Недавно я просматривал этот генератор карт и пытался построить на нем карту (<map></map>), но это не позволяет мне настраивать карту после ее создания.

1 Ответ

0 голосов
/ 10 июня 2019

Я думаю, что ваш лучший вариант будет:

  • Хранить данные карты в простой сериализуемой структуре данных.Например, двойной массив объектов с несколькими целыми числами - перечисление типа плитки, тип здания, данные о состоянии, если вам это нужно, и т. Д. Это позволит вам легко сериализовать и отправлять данные между сервером и клиентами.

  • Используйте рендерер игрового движка / холста / рендеринга webgl, чтобы визуализировать представление для клиента с помощью массива данных.У меня есть опыт работы с PIXI.js (фреймворк для 2D-рендеринга с использованием WebGL или Canvas) и Phaser (движок для 2D-игр, построенный на основе PIXI).Так что я могу порекомендовать вам эти два, если ваша игра 2D.PIXI используется только для рендеринга, в нем нет игровой логики, и вам придется его реализовать.Хорошо, если игра не так сложна или если вы хотите научиться делать что-то самостоятельно.Phaser, с другой стороны, представляет собой полноценный игровой движок, который обладает всевозможными функциями разработки игр, но это также означает, что он более наполнен вещами, которые вам могут не понадобиться.

  • Когда пользователь щелкает что-то, отправьте на сервер сообщение «пользователь x щелкнул плиткой x, y», обработайте ввод, отредактируйте основной массив данных и отправьте его всем клиентам.Для этого вы можете использовать веб-сокеты или просто простые HTTP-запросы

В качестве альтернативы вы можете использовать один из «больших» игровых движков и просто скомпилировать его в js и html - Unity,Годо, создатель Cocos (в этом вы действительно пишете в JS)

...