Дата начала разработки: 10 августа 2021 года.
Содержание
Среда разработки
В качестве среды разработки был выбран бесплатный кроссплатформенный движок Solar2D v2021.3649 (бывший Corona SDK) от компании Corona Labs Inc. При разработке приложений используется язык Lua v5.4.3 – по идеологии и реализации язык ближе всего к JavaScript.
Solar2D обладает полноценным симулятором и простейшей консолью отладки. Также присутствует очень удобная функция Live Build – тестирование приложения одновременно на нескольких устройствах и разных платформах в режиме реального времени. Для работы данной функции необходимо, чтобы компьютер и устройство были подключены к одной локальной сети.
«Просто как по волшебству.»
Как среда разработки, так и язык программирования обладают официальной документацией. Практически вся актуальная документация на английском языке:
Но встречается и русскоязычная информация:
Язык Lua и Corona SDK (1/3 часть), Язык Lua и Corona SDK (2/3 часть) и Язык Lua и Corona SDK (3/3 часть)
Есть и русскоязычные видео:
Немного примеров проектов:
Интерфейс
В файле config.lua задаются параметры конфигурации. Среди таких параметров задаётся и метод масштабирования. Был выбран метод «adaptive», который выбирает ширину и высоту динамического содержимого в зависимости от устройства.
application = {
content = {
scale = "adaptive",
}
}
В связи с особенностями данного метода для заданий размеров и положений объектов необходимо использовать свойства display.contentWidth и display.contentHeight, а также расчёты с этими свойствами. Для этого в файле main.lua, который является основным файлом любой программы, написанной на Solar2D, были заданы глобальные переменные:
_W = display.contentWidth
_H = display.contentHeight
_CenterX = display.contentCenterX
_CenterY = display.contentCenterY
На основе вышеизложенного реализовано главное меню.
Положение кнопок по вертикали задаётся универсальной формулой:
buttonHeight*lengthTable(buttons) + ((_H - buttonHeight*5)/6)*(lengthTable(buttons) - 1)
Первое слагаемое задаёт положение кнопки, а второе слагаемое отвечает за отступ между кнопками, начиная со второй кнопки.
Также разработаны окна паузы и подтверждения выхода из игры. Дизайн данных окон не является конечным.
Параметры сборки приложения указываются в файле build.settings. Так как игра будет в горизонтальном положении, то укажем начальную ориентацию, а также допустимые варианты ориентации экрана:
settings = {
orientation = {
default = "landscapeRight",
supported = {"landscapeRight", "landscapeLeft"}
}
}
В этом же файле можно задать и заставку при открытии приложения. Дизайн заставки не является конечным.
settings = {
splashScreen = {
enable = true,
image = "Images/launchScreen.png"
}
}
Реализована пробная иконка приложения как для API уровня <26 (Android 7.0 и ниже), так и для API уровня ≥26 (Android 8.0 и выше). Для этого по пути AndroidResources/res/ созданы и правильно названы соответствующие файлы иконок для разных плотностей экранов Android.
Настройки – звуки, музыка, локализация
Ещё одним разделом в файле build.settings является раздел настроек сборки для устройств Android.
settings = {
android = {
isGame = true,
minSdkVersion = "15",
versionCode = "1"
}
}
Здесь для Google Play классифицируется приложение, как игра. Указывается минимальная версия SDK. Минимальный уровень API в Solar2D – 15 (Android 4.0.3). Также внутренний номер версии. Этот номер используется для определения более новой версии приложения – более высокие числа указывают на более новую версию приложения. Данная строка будет обычным инкрементом при выпуске новых версий.
В экране настроек реализовано изменение громкости звуков и фоновой музыки, а также локализация всего текста игры. Язык текста меняется в режиме реального времени, и никаких перезапусков не требуется.
Положение текста над ручками слайдеров будет исправлено.
На данный момент игра планируется на 4-х языках:
Русский
English
Deutsch
Українська
Реализованы звуки шагов персонажа, нажатий на различные кнопки. Реализована фоновая музыка. Звуки и музыка не являются конечным.
Экран настроек также можно вызвать из окна паузы во время игры. Дизайн окна настроек не является конечным.
Сохранение всех настроек производится с помощью метода системной функции:
system.setPreferences("app", table)
Графика
Реализована анимация движения главного героя.
Начата разработка карты для первой главы сюжета.
Управление
Реализован джойстик для управления главным героем.
Для созданий джойстика был создан отдельный модуль joystick.lua вида:
local class = {}
function class.createJoystick()
-- function body
end
return class
Из основного файла джойстик создаётся следующим образом:
local moduleJoystick = require("Module.joystick")
function scene:create(event)
local joystick = moduleJoystick.createJoystick()
end
scene:addEventListener("create", scene)
return scene
Смена анимации движения главного героя происходит при пересечений центром джойстика линий ± 45° с проверкой на текущее значение последовательности кадров для предотвращения бесконечной смены анимации. Схематично это выглядит так:
Как при касании по экрану внутри джойстика, так и при уходе движения касания за джойстик центр джойстика всегда движется только по окружности фона джойстика. Серые круги означают возможные касания, чёрные круги – желаемое положение центра джойстика.
Для этого была решена геометрическая задача. Имеем центр джойстика (x1,y1) и точку касания по экрану, которая вышла за джойстик (x2,y2). Необходимо найти точку на окружности (x3,y3).
В итоге получим формулы, которые необходимо указать для положения центра джойстика при касании по джойстику.
Математические формулы положения центра джойстика:
local alfa = math.atan(deltaY/deltaX)
centerJoystick.x = math.cos(alfa)*radiusBgJoystic*sign(deltaX) + centerJoystickPositionX
centerJoystick.y = math.sin(alfa)*radiusBgJoystic*sign(deltaX) + centerJoystickPositionY
В переменной deltaX записывается величина отклонения по оси X точки касания по экрану от центра фона джойстика. Аналогично, и deltaY. Соответственно, sign(deltaX) информирует о движении влево или вправо от центра фона джойстика.
Сейчас начать движение можно только проведя по фону джойстика, но в планах добавить возможность начать движение и по клику на фон джойстика.
В основном движение главного героя имитируется перемещением карты, а сам главный герой остаётся в центре экрана. В случае, когда карта достигает своей границы, то уже начинает перемещаться главный герой, пока не встретит границы карты, которые будут и границей экрана.
В планах разработать карту таким образом, добавив по краям карты некий фон, чтобы персонаж навсегда оставался в центре экрана.
Реализована коллизия карты и главного героя, которая предотвращает движение главного героя в местах, где движение по логике невозможно – стены, обрывы, горы, здания, предметы интерьера. Для наглядности и тестирования видимость коллизии включена.
Реализовано сохранение позиций карты, игрока, объектов. При повторном открытии игровой сцены всё будет, как и перед выходом.
Объекты и инвентарь
Добавлены объекты основной валюты: болты и монеты. Дизайн объектов не является конечным. Был создан файл JSON записями вида:
{
"type": {
"name": "",
"icon": "path",
"description": ""
},
}
Solar2D поддерживает JSON5, в котором добавлена возможность добавлять комментарии, а так же возможность не удалять запятую при копировании у последнего элемента.
Реализован инвентарь. Дизайн окна инвентаря не является конечным. А также создан JSON файл инвентаря вида:
{
"item**": {
"type": "",
"count": 0
},
}
Обязательно будет добавлена локализация объектов получаемых из JSON файла всех объектов.
Реализован спавн монеты, сохранение позиций при выходе со сцены и новое положение при подборе монеты. Подобранная монета, естественно, увеличивает количество монет в инвентаре. Все собранные монеты сохраняются в инвентаре при повторном входе на сцену.
В планах отключать анимацию монеты при выходе её за пределы экрана.
Важным моментом, который уже решён аналитически, является проверка на несовпадение коллизии карты и позиции при спавне монетки. После программной реализации решение данной задачи, а также других методов решения такой задачи будет рассказано в следующем Developer Blog, который планируется выйти через месяц.
Итоги
Данный Developer Blog показывает объём работы, выполненный за первый месяц работы над игрой, включая знакомство со средой разработки и языком программирования. На текущий момент больших сложностей со средой разработки и языком программирования пока не возникало.
Все желающие могут протестировать всё реализованное, скачав документ ниже.
Как только игра приобретёт более-менее играбельный вид, то будет набрана команда постоянных тестеров, а пока о всех найденных ошибках можно будет написать в комментариях под постом с этой статьёй, в соответствующем обсуждении нашей группы ВКонтакте или на нашу почту:
fas.offical@ya.ru
Об идеях и предложениях пока рано говорить, но в будущем мы обязательно постараемся выслушать мнение аудитории. А пока будут исправляться моменты, которые были указаны в данном Developer Blog, а также будет начато программирование первой главы сюжета.
Комментарии (6)
flashkosta
20.10.2021 16:50А почему не Unity, Godot? Самому очень нравится Solar2d. Интересна идеология со стороны) И еще интересно рассуждение по поводу того, насколько есть будущее у этого движка и есть ли где то статистика актуальная по проценту использования его в настоящее время разработчиками?
Cepera_C_A Автор
20.10.2021 17:24Unity, Godot – это игровые движки, поддерживающие разработку 3D игр. Мне же захотелось познакомиться с движком именно для 2D игр/программ. Но как я говорил ранее: при сравнении любых продуктов, определённо, будут выявлены как плюсы, так и минусы. В связи с отсутствием у Solar2D визуального редактора для кого-то работа с этим движком возможно будет немного сложнее.
Будущее у движка однозначно есть – 2D игры никогда не пропадут, не говоря уже про программы. Разработчики активно работают над движком, выпуская по несколько обновлений и доработок в месяц. Также благоприятно для будущего движка играет роль русская документация и простота работы с языком Lua – это может сподвигнуть наших «маленьких» разработчиков использовать движок для воплощения своих идей.
В Google Play на текущий момент более 2 тысяч приложений написанных на движке Solar2D с общим количеством загрузок более 3 миллиардов. В процентном соотношении это 0.28% приложений и 0.35% установок. Наиболее высокий процент (4.08%) приложений написанных на движке Solar2D в категории «Образовательные».
К слову, Google удаляет из магазина приложения, в которых не указаны определенные данные. Разработчики, потерявшие интерес к своему приложению, могут не заполнить эту информацию, и Google впоследствии отменит публикацию приложения. В связи с этим за последний год общее количество приложений в Google Play постоянно снижается.
moshamiracle
26.10.2021 13:30В Google Play на текущий момент более 2 тысяч приложений написанных на движке Solar2D с общим количеством загрузок более 3 миллиардов.
А как можно посмотреть эту статистику по разным движкам?
kovserg
А чем Solar2D лучше например Löve2D
Cepera_C_A Автор
Для сравнения всегда нужно поработать с обоими движками. Так как я не работал с Love2D, поэтому не могу сказать. Но по первому взгляду оба движка похожи: предназначены для 2D игр, используют язык Lua, похожая документация, а также легки в использовании. Как и при сравнении любых других продуктов, определённо, будут выявлены как плюсы, так и минусы обоих движков.