Lite_stream
@Lite_stream

Разработка онлайн игры?

Насколько болезненна будет интеграция игрового движка, скажем, libGDX в самописную обёртку для многопользовательского взаимодействия, которая включает:
1. Лист снапшотов изменения игрового состояния. Чтобы при получения команды от клиента, в зависимости от его пинга можно было отнести к определённому снапшоту ( моменту времени, когда он на клиенте произвёл какое-либо действие ) и применить команду к миру.
2. Бинарный протокол обновления состояния на базе UDP
3. Иерархию классов юзеров для сетевого взаимодействия ( Сессия, шифрование и так далее )

Например, тяжело ли будет ( за O( 1 ) ) получить список изменений стейта за текущий тик, на каждом из которых ( например, координат игрока ) складировать их в объект ноды листа снапшотов, а после текущего тика добавить эту ноду в голову листа

Игра не предусматривает каких-либо нетривиально реализуемых физических эффектов, кроме collision detection, которые, в принципе, можно реализовать самому с помощью Quadtree, придётся, конечно поломать голову, как сделать дерево эффективным по использованию кэша процессора, но не думаю, что это станет камнем преткновения

Вопрос: имеет ли смысл разбираться с libGDX для интеграции в обёртку для многопользовательской игры или же всё-таки стоит разработать свою архитектуру игры, включив в неё небольшой физический движок ?
  • Вопрос задан
  • 353 просмотра
Решения вопроса 1
@majstar_Zubr
C++, C#, gamedev
Да, разобраться стоит, хотя бы по причине найти тот вид сетевого клиента, который потребуется, чтобы позже прийти к решению - какие требования должны быть к движку - там уже будете выбирать из целого зоопарка, либо перепишите протип на libgdx в минимальный движок.

Все зависит от логики бекенда, потому что из коробки libgdx требует только:
1) привязки к основным событиям контекста платформы, на которой запускается игра
2) определённый игровой цикл
Все остальное вы пишите сами.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
dollar
@dollar
Делай добро и бросай его в воду.
Сетевая часть - пожалуй, самая сложная часть в геймдеве (если это не браузерка, конечно).

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

Или пишите с нуля - тогда сразу выбирайте Unity (переписывать с нуля, имея наработки, будет немного проще, а что касается C#, то лучше 1 день потерять, потом за 5 минут долететь). Сейчас новые игры пишут именно на Unity по многим причинам, в этом плане конкуренции практически нет.

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

Физика представлена, соответственно, в виде Box2D, можете взять его. (Другие физические движки можете гуглить, обзор всех выходит за рамки вопроса).

Что касается сетевой части, вам придется принимать мучительные решения, как это реализовать наилучшим образом, чтобы игроки были довольны геймплеем в условиях ненулевого лага. Это целиком зависит от того, что у вас за игра и в чём фан.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы