Дата начала разработки: 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, а также будет начато программирование первой главы сюжета.