- PVSM.RU - https://www.pvsm.ru -
Для вас подготовил серию статей о мобильном геймдеве, основанную на полученном опыте и пройдённых граблях. В первой статье речь пойдёт о создании собственного кроссплатформенного движка для мобильных игр. По правде говоря не только мобильных, и не только игр.
Каждый раз, когда очередной популярный движок становится бесплатным или открытым, я задаю себе этот вопрос. Давайте рассмотрим плюсы и минусы:
Плюсы
Минусы
Конечно каждый для себя увидит свои плюсы и минусы. Мое дело предупредить. Поехали!
Мы говорим в первую очередь о разработке мобильных игр, поэтому основа будет однозначно на C++/OpenGL. Без вариантов! Однако без второстепенных языков тоже не обойтись. Давайте посмотрим что используется на каждой платформе:
Платформа | Основа | Обертка | Графика |
iOS | C++ | ObjectiveC или Swift | OpenGL |
Android | C++ (NDK) | Java | OpenGL |
WindowsPhone | C++ | C# | OpenGL через врапер или DirectX |
tvOS (AppleTV) | C++ | ObjectiveC или Swift | OpenGL |
OSX | C++ | ObjectiveC или Swift | OpenGL |
Linux | C++ | C++ | OpenGL |
Как видите C++ и OpenGL встречаются везде. На ObjectiveC/Java/C# придется написать только обертку для работы с системой девайса. Сам же код ваших проектов будет единый — на С++. На этой ноте скажем: «До свидания, мучительное портирование!».
Настоятельно рекомендую использовать OpenGL 2.0 и выше. Время OpenGL 1.1 давно прошло, а переход с 1.х на 2.х вы будете вспоминать в кошмарных снах. Однако не спешите использовать последнюю версию OpenGL не убедившись, что все целевые платформы его поддерживают. В большинстве случаев OpenGL 2.0 вполне хватает и поддерживают его все платформы.
Та же ситуация и с С++11/14. Если уверены, что все компиляторы с ним дружат – супер. Мне же хватает C++98, так что при добавлении новой платформы — а в планах есть поддержка консолей — я буду спокоен.
Xcode – для iOS, OSX, tvOS. Плагины через CocoaPods [1].
Android Studio – для Android. Плагины через Gradle [2].
Visual Studio – все что под Windows.
Прежде всего движок и проекты должны аккуратно и логично храниться на диске. В итоге я пришел к такой структуре:
Сборщик проекта отвечает за подготовку ресурсов, форматы и упаковку. А именно:
Далее сборщик конвертирует ресурсы, шифрует, упаковывает и помещает в [Platform]/Res.
Самое важное тут – это конвертация файлов по расширению. Я использую такие конвертации:
Например image~q100.png будет сжата с параметром quality 100, а image~less.png будет сжата без потери качества.
Так же хорошо себя зарекомендовали пресеты.
Например к image~p1.png будет применен 1й пресет, который перевернет картинку зеркально и сохранит с качеством 90%.
При этом сборщик смотрит время изменения файла и конвертирует только измененные файлы, что заметно ускоряет его работу. Конкретно у меня сборщик написан на PHP. Возможно это не лучший выбор, но мне так было проще. К тому же потенциально его можно перенести на сервер для командной работы.
Я бы рекомендовал использовать такие форматы:
WEBP для картинок. Вряд ли для кого-нибудь этот формат окажется новым. А для тех, кто слышит о нем впервые – webp может хранить картинку без потери качества как PNG, а так же с потерей — как JPEG, однако с заметно лучшим качеством, меньшем весом и с прозрачностью. Еще из плюсов – возможность скейла картинки на лету при чтении файла. Компилируется libwebp [3] под все платформы без проблем.
OGG для звуков. Андроид нативно понимает OGG формат, а на iOS/OSX/tvOS я использую библиотеку Tremor [4] (fixed-point version of the Ogg Vorbis) для раскодировки звуков в WAV и скармливанию их OpenAL. Попытки использовать OpenAL и на андроиде успехом не увенчались (звуки были с задержками).
Разберем подробнее какие классы содержит движок и для чего нужны модули?
Правило «что выносить в модуль, а что в движок?» очень простое:
Следуя этому правилу, я распределил классы следующим образом:
В следующих статьях я подробнее остановлюсь на конкретных классах и модулях, с примерами и полезностями. Отдельное внимание хочу уделить рендерингу SDF шрифтов (Signed Distance Field) и шейдерам в игре из шапки.
Если какие-то отдельные вопросы вас заинтересовали – плз пишите в каментах, добавлю их в план статей.
Автор: Apetrus
Источник [5]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/ios/118639
Ссылки в тексте:
[1] CocoaPods: https://cocoapods.org
[2] Gradle: http://gradle.org/getting-started-android/
[3] libwebp: https://developers.google.com/speed/webp/
[4] Tremor: https://wiki.xiph.org/Tremor
[5] Источник: https://habrahabr.ru/post/282065/
Нажмите здесь для печати.