90% Bullethell дрочильни, 9% лени и 1% остального
! Для сборки необходимо иметь Java17
./gradlew :server:buildServer :android:assembleDebug
Вы можете собрать всё сразу - ./gradlew build, либо всё по отдельности.
Для сборки для Desktop'а: ./gradlew :lwjgl3:shadowJar
Для сборки apk нужно установить android-sdk, есть два пути - AndroidStudio и Сommand-tools. Я использовал второй вариант, так что ниже о нём.
Для начала установите его с официального сайта
- Где-нибудь в удобном месте создайте папку, условно
droid-sdk - Внутри папки создайте папку
cmdline-tools - Внутри этой создайте
latest - Распакуйте туда содержимое скачанного архива. Должно быть
/path/to/droid-sdk/cmdline-tools/latest/X, где X это содержание архива: bin, lib итд - Запустите /bin/sdkmanager, установите компоненты:
./sdkmanager "platform-tools" "platforms;android-35" "build-tools;35.0.0". после успешной установки обязательно запустите./sdkmanager --licensesи прожмите вездеy, иначе gradle не сможет работать - Добавьте env ANDROID_HOME дo droid-sdk
- Вы установили эту хрень и потратили гигабайт места!!! (потом ещё 5 потратите)
Если вы всё это время держали терминал/ide открытой, то перезапустите его, чтобы применились env'ы, затем можете билдить: ./gradlew android:assembleDebug
Если libGDX пожалуется на отсутствие конкретной версии API, просто доустановите её через
sdkmanager "platforms;android-XX"и в android/build.gradle.kts поставьте нужный target-sdk
Вы можете отдельно собрать только сервер.
./gradlew :server:buildServerТакже сервер можно запустить из клиента:
java -jar filename-client.jar --serverпо большей части нужен мне, чтобы знать что делать и не забить на это всё в процессе
-
Мультиплеер
- Сделать Game абсолютно независимым, чтобы мог быть инициализирован как клиентом, так и сервером
- Изменить архитектуру проекта на core (общее: компоненты, системы, генератор карты), client (текущий view) и server (серверный цикл)
- Сделать минимальный Hi Hello сетевой стек.
- Адаптировать логику клиента и сервера для работы с сетью
- (!) клиент НЕ должен самостоятельно вызывать что-либо в Game, он должен отправлять пакет и получать подтверждение
- синхронизировать игровую карту (клиент отправляет параметры (GameData), сервер хавает)
- если сервер НЕ должен возвращать карту, то пусть сервер передаст шанс рандома, чтобы клиент сам создал карту с таким рандомом.
- Перенести соло игру на интегрированный сервер.
- клиент инициализирует и запускает локальный сервер в GameScreen
- конфиг генерации мира с клиента должен применяться на сервере
- ? Оптимизации пакетов. ктож знает какие задержки могут быть вне локального сервера.
- НеЗабитьНеЗабитьНеЗабитьНеЗабитьНеЗабитьНеЗабитьНеЗабитьНеЗабитьНеЗабить
-
Hello LibGDX!
- Javafx слишком много срёт на слабых устройствах и в целом не подходит для текущих целей. нужно переписать рендер:
-
client.controllers->client.screens -
client.custom.* -
client.systems.<classname.toLowerCase().equals("render")>
-
- создать ветку и настроить
build.gradle.kts. - Баги/проблемы (исправить)
- ? Из-за написанного кода под javafx, на клиенте могут возникать проблемы с логикой из-за другой системы координат в libgdx, например, при просчёте логики полёта пуль, необходимо домножать скорость на размер тайлов.
- коллизия/рендер пулек поломались и они могут заходить сквозь стены.
- ? вероятно при нестандарных размерах экрана рендер ломается.
- сервер не удаляет игрока, если он отключился.
- клиент рендерит других игроков как врагов.
- ui не масштабируется как надо при изменении размера окна.
- при очень высоких значениях fps плавное движение камеры менее заметно.
- (?) при fullscreen размер окна равен разрешению в настройках
- если на мобильном устройстве поменять разрешение в настройках то игра крашнет
- solution: скрыть для мобильных устройств настройки разрешения.
- сделать в Main метод isMobile для проверки среды без и с учётом выбранного управления
- ? Из-за написанного кода под javafx, на клиенте могут возникать проблемы с логикой из-за другой системы координат в libgdx, например, при просчёте логики полёта пуль, необходимо домножать скорость на размер тайлов.
- Javafx слишком много срёт на слабых устройствах и в целом не подходит для текущих целей. нужно переписать рендер:
-
Сделать возможность подключения к внешним серверам. Обезопасить интегрированный сервер от не локальных подключений.
-
! Вернуться к фазовым планам.
...
...
- Создание игрока
- Реализовать класс
Playerс базовыми характеристиками (здоровье, скорость). - Настроить управление движением персонажа (через
AnimationTimerиDeltaTime). - Реализовать точный хитбокс, отдельный от спрайта.
- Реализовать класс
- Система прокачки
- Реализовать систему уровней и опыта за убийство врагов (см. Пометка1).
- Создать систему предметов, влияющих на характеристики (см. Пометка2).
- Разработать систему инвентаря для хранения предметов.
- Боевая система
- Реализовать механику использования умений с перезарядкой (Кулдаунами) (см. Пометка3).
- Добавить элементальные и статусные эффекты (огонь, лед, яд) (см. Пометка4).
...
- Основная логика
- Реализовать систему столкновений (Collision Detection).
- Настроить логику спавна врагов на сгенерированных уровнях.
- Roguelike-механики
- Реализовать перманентную смерть (сброс прогресса забега при гибели).
- Создать систему мета-прогрессии (см. Пометка6)
- Ввести специальную валюту, сохраняемую после смерти.
- Создать меню, где можно тратить валюту на постоянные улучшения.
- Игровой HUD
- Отображение здоровья и других характеристик игрока.
- Иконки умений с отображением перезарядки.
- Отображение очков/валюты.
- Экраны и меню
- Главное меню.
- Меню паузы.
- Экран "Game Over".
- Меню мета-прогрессии.
- Система прокачки
- Помтека1: Классическая система уровней. Персонаж получает опыт за убийство врагов, и при достижении нового уровня игрок распределяет очки по основным характеристикам (сила, ловкость, интеллект и т.д.).
- Пометка2: Система на основе предметов. Прокачка происходит в основном за счет находимого снаряжения. Новые мечи, броня или артефакты дают бонусы к характеристикам или новые способности.
- Боевая система
- Пометка3: Навыки с перезарядкой. Активные умения из древа навыков можно использовать с определенной перезарядкой (кулдауном). В JavaFX это можно визуализировать с помощью иконок, которые становятся цветными по готовности.
- Пометка4: Элементальные или статусные эффекты. Можно добавить урон от огня, льда, яда и т.д. Враги могут иметь уязвимости или сопротивления к определенным типам урона, что добавит тактической глубины.
- Механики Bullet Hell
- Пометка5: Сложные паттерны. Снаряды могут лететь по синусоиде, спирали или менять направление через некоторое время.
- Roguelike-механики
- Пометка6: Частичная мета-прогрессия. После смерти игрок сохраняет специальную валюту, которую можно потратить в главном меню на постоянные улучшения (например, увеличение начального здоровья или разблокировку нового стартового оружия).
- В будущем как уровни сложности:
Жесткая перманентная смерть. Ничего не сохраняется после смерти.|Разблокировка контента. Новые враги, предметы и боссы могут появляться в последующих прохождениях только после того, как игрок достигнет определенных успехов (например, дойдет до определенного уровня или победит первого босса).
- В будущем как уровни сложности:
- Пометка6: Частичная мета-прогрессия. После смерти игрок сохраняет специальную валюту, которую можно потратить в главном меню на постоянные улучшения (например, увеличение начального здоровья или разблокировку нового стартового оружия).