Для GameMaker вышло расширение Colyseus, и сетевой код в проекте сводится к нескольким вызовам GML
6 августа в блоге GameMaker появилось интервью с командой Colyseus по случаю выхода их расширения. Colyseus — открытый фреймворк для сетевой игры в реальном времени: комнаты, подбор игроков, синхронизация состояния и авторитетный сервер. Сервер остаётся отдельным приложением на Node.js и TypeScript, но опыта в них, по словам авторов, не требуется, а разворачивать его можно у любого хостера.
Поддержки GameMaker сообщество просило годами, и до расширения люди изобретали обходные пути ради HTML5-сборок. Сделать её получилось после того, как клиент переписали на общее ядро на C, которое теперь питает все нативные SDK.
Подбор игроков сводится к вызову colyseus_client_join_or_create() с именем комнаты: он либо подключит к существующей, либо создаст новую, лобби писать не нужно, а по дополнительным параметрам можно разводить игроков по режиму или региону. Обработчики регистрируются как colyseus_on_state_change() и colyseus_on_message(), а один вызов colyseus_process() в Step разбирает всю очередь, без потоков и асинхронных сюрпризов.
Состояние живёт на сервере, клиенту приходит компактная двоичная заплатка только с изменениями, и она превращается в понятные события: игрок добавился, координата изменилась, игрок вышел. Клиент при этом шлёт намерения: он сообщает «хочу пойти», а куда игрок попал, решает сервер. Правку памяти на своей машине это обесценивает. Оттуда же берётся скрытая информация, тяжело дающаяся играм с хостом на клиенте: в демо с картами сервер владеет колодой и сообщает каждому только его руку, остальные видят лишь число карт.
В комплекте нативные библиотеки для Windows, macOS и Linux плюс сборка WebAssembly для HTML5 и GX.Games, автоматическое переподключение с очередью исходящих сообщений и два демо-проекта с исходниками: пошаговая карточная игра и танки в реальном времени.
Мобильных платформ пока нет, они обещаны позже. Замеров задержки и нагрузочных тестов в материале тоже нет, это интервью, а не технический разбор, так что цену решения придётся мерить самому. И сервер на Node.js всё равно кому-то нужно поднимать и обновлять.
Полный текст: https://gamemaker.io/en/blog/colyseus-multiplayer
Приятно, что демо отдают с исходниками: по ним видно, где проходит граница между «клиент показывает» и «сервер решает» :)
@make_game
Post #1973
1.64K

- 👍 5
- ❤ 1