
Sand-Box2D возвращается
Привет! Сегодня я снова начал работать над Sand-Box2D.
Вы не знаете, что это такое? Погодите, сейчас всё объясню.
Содержание
Так что такое Sand-Box2D?
Это игра, которую я написал на C++ с библиотекой Box2D в качестве физ. движка. Я просто хотел изучить эти вещи, а также библиотеку SDL2, чтобы создавать окна и рисовать в ней какую-нибудь графику. OpenGL в то время казался мне слишком сложным, поэтому я решил остаться с рендерером SDL2.
Поискав, как это сделать, я нашел в интернете небольшой проект (автор Simon Ranftl), который этим и занимается. Это небольшая программа C++ для Mac (дополнительно поддерживаются Windows и Linux), которая использует Box2D для создания среды, в которой коробка падает на платформу.
Обновив свой проект на основе этого, я решил дать ему название и превратить его в игру, в которую можно играть на ПК и PS Vita (позже, возможно, и на мобильных устройствах) под названием Sand-Box2D.
Я оставляю тут GIF-ку, чтобы вы могли посмотреть, как выглядит игра (её также можно было увидеть на параллаксе на главной):

PS Vita?
Что меня действительно заинтересовало, так это то, как я смог скомпилировать этот маленький проект для моей PS Vita. После нескольких часов попыток правильно настроить VitaSDK и связать все библиотеки (в VitaSDK предустановлен Box2D!) я наконец-то скомпилировал файл main.cpp
, который мог инициализировать рендерер и действительно показать мне результат. Здесь я оставляю видео с того самого момента, 24 августа 2022 года (оно было записано вскоре после моего первого прибытия в мой нынешний город!):
С тех пор я работаю над этим проектом в режиме "Vita-first", то есть когда я работаю на ПК и добавляю новую функцию, я должен сначала запустить игру в окне 960х544 (разрешение экрана PS Vita), потом скомпилировать и запустить на самой Vita и только потом работать в других разрешениях.
Зачем она существует?
Как я уже говорил, я просто хотел изучить несколько библиотек C++. Но когда я заглянул в файл
main.cpp
,
предоставленный Саймоном, чтобы узнать, как он использовал две библиотеки вместе (SDL2 и Box2D), я не смог понять всё до конца. В коде были некоторые раздутые части, он порождал больше объектов, чем я видел на экране (именно поэтому я иногда натыкался на невидимые стены), и в целом структура казалась мне слишком тяжелой для понимания.
В этот момент я решил создать свой новый проект на основе этого, делав такой рефактор, как мог, объясняя каждую часть кода, которую мог объяснить, и удаляя всё бесполезное, что только мог удалить.
И как я уже говорил ранее, добавив в него кучу разных вещей, я решил превратить его в настоящую игру.
Кто в неё играет?
Никто. Буквально! Я никогда не выпускал ее, так что это нормально, что люди о ней не знают. Когда я писал эту статью, репозиторий игры на GitHub насчитывал ровно 10 звезд.
Система блога: "А если я сделаю запрос к API GitHub, у проекта прямо сейчас... 11 звёзд. Однако у нового репозитория 2 звезды. Круто, да?"
Кто в неё будет играть?
Разрабатывая эту игру, я понял, что мне нужно сделать все модульным: расположение уровней, обработку нажатий кнопок в игре... Потому что в ином случае всё это было бы захардкожено.
Когда я переносил жёстко закодированные части кода в отдельный файл, начинал думать о его формате в JSON и о том, что ещё я мог бы туда поместить, я подумал: "Погоди! То, что я делаю прямо сейчас, так создаю уровень!" - и действительно, я создавал уровень. Целую систему загрузки пользовательских уровней, если быть точнее.
Таким образом, я понял, что в моей игре должен быть редактор уровней, а я должен поощрять людей использовать его и публиковать свои уровни.
Но ещё я обнаружил, что импортировать скрипты Python внутри такого проекта очень просто. Это означало, что в какой-то момент я мог запустить файл Python, импортирующий модуль из моей C++ игры, дабы вызывать функции C++ оттуда.
И я это сделал! И на ПК, и на PS Vita (не забывайте, что проект всё ещё "Vita-first"). Если бы вы скомпилировали игру с правильными настройками, то при нажатии кнопки РЕДАКТОР УРОВНЕЙ
вы бы на самом деле запустили скрипт Python, который вызывает функцию C++ "играть случайный звук" в цикле и, таким образом, издаёт громкий шум. Я не могу передать, как меня это обрадовало, когда увидел такое впервые.
Это лишь один маленький тест. Я хочу сделать то же самое в самом редактировании уровней, дабы оно действительно было интересно. Можно посмотреть концепцию вот здесь.
Итак, отвечая на вопрос, кто будет в неё играть: это будут люди, ищущие способ заниматься творчеством, находясь в пути с PS Vita на руках, создавая уровни, но не только (уровни можно создавать во многих играх для Vita на самом деле), а также писать для них скрипты Python прямо на ходу.
Разве это не хорошо, как возможность? Когда я был маленьким, это могло бы быть моим любимым занятием наряду с другими вещами, которые я мог делать на ходу: как во времена Nokia Symbian, например. Вы же знаете, что были кнопочные телефоны, на которых был, в самом деле, Python, а множество программ на нём базировалось? Я это знал, и я знал, что должен был изучить его, что всё-таки и сделал. Куча проектов с использованием AppUiFw: ремейк игры "Asteroids" с использованием формул sin/cos для вращения ракеты, когда мне было около 14 лет, а никто меня и не заставлял изучать всю эту математику в таком раннем возрасте; небольшая игра, в которой нужно ловить фрукты сверху; программа, которая позволяет мне легко использовать внутреннюю функцию преобразования текста в речь; всё это написано непосредственно на телефоне без использования ПК и т.д. и пр... Эх! Всё-таки мне не хватило ума всё это сохранить где-то или кому-то отправить. Всё это сейчас хранится на моей Nokia C5, которая спокойно ждёт меня в моем доме в Мариуполе, а из-за войны я не смогу увидеть этого всего вновь в течении многих лет.
Ах, извините, я немного переборщил. Просто надо было где-то высказаться.
В любом случае, у вас есть ответ. Эта игра создана для тех, кто хочет создавать интересные вещи напрямую на PS Vita. И не только на Vita, если кто-то портирует игру на Switch (у меня его нет), это было бы здорово. И на Steam Deck, если нам удастся выпустить игру в Steam.
Итак?
Итак, теперь мне нужно просто что-то начать делать с этой игрой.
Я начну с полного рефакторинга игры (пересоздаю её. Опять). Это гарантирует, что я буду использовать весь свой опыт в архитектуре, полученный в этом году, а в игре не будет некоторых устаревших проблем (например, привязка всех событий по времени к кадрам. Это означает, что игра работает только в 60FPS!).
Я позабочусь о том, чтобы она работала безупречно на всех платформах, к которым у меня есть доступ (Windows, Linux, macOS, PS Vita, позже, наверное, на некоторых мобильных), чтобы я не зависел конкретно от SDL2 и SDL2_Renderer (чтобы иметь возможность рендерить игру с помощью GLFW и OpenGL или Metal, например) и чтобы я мог создать редактор уровней на основе кода самой игры. Это бы очень помогло.
Теперь, я думаю, это прекрасно объясняет, что я собираюсь делать. До скорого!