Тестирование небольшого движка для мобильных 2D онлайн игр.

Здравствуйте, захотелось как-то мне разработать небольшую онлайн игру для мобилок. По работе в основном пишу драйвера и прошивки для устройств. Но было время – разрабатывал небольшие Flash игры, браузерки, потом игры для соц.сетей, и пару лет работал программистом в крупной игровой компании. Понял, что в качестве профессиональной деятельности за зарплату мне этим заниматься не интересно. Поэтому теперь разрабатываю игры в качестве одного из хобби.

Так вот, хочу сделать небольшой онлайн батлер для мобилок и столкнулся с проблемой выбора движка под это дело

Тестирование небольшого движка для мобильных 2D онлайн игр. Игровой движок, 2D, Android, iOS, Benchmark, Бенчмарк, Длиннопост

Хотелось сильно не заморачиваться и сразу приступать к разработке. Движков нынче пруд пруди. Чего мне от движка хотелось:

• Более менее знакомый язык программирования;

• Бесплатный и доступный в освоении;

• Поддержка сетевого взаимодействия по UDP, TCP протоколам;

• Поддержка самого движка (ибо SDK платформ и версии OS постоянно обновляются);

• Высокая производительность (большое количество анимаций без тормозов).


Знакомство с движками


Adobe AIR – не игровой движок, но первый кандидат, так как я раньше разрабатывал игры под Flash, и все тут очень знакомо, много полезных наработок. Для небольших приложений очень удобная штука, но даже с использованием Stage3D не очень шустрый. Однако основная причина отказа от Adobe AIR в том, что функционала для мобилок мало, даже вибрацию надо отдельным расширением вставлять, а рекламные сети, in-app и прочие возможности крайне трудно найти, да и те не актуальные из-за непопулярности технологии.


Haxe – тоже не движок, но технология очень интересная. Многие с Flash переходили на OpenFL и прочие производные в свое время, и нахваливали. Решил попробовать на lime и потом на OpenFL по примерам собрать тестовые сборки. На lime все очень быстро, но очень низкоуровнево и много проблем с реализацией дополнительных возможностей Android и IOS, легче на родных средах разработки писать. OpenFL удобен и похож на Flash, но примерно так же медлителен и мало платформозависимого функционала.


Unity – решил посмотреть в сторону одного из самых популярных движков для игр. Для тех, кому Unity – первая среда разработки, наверное, все просто и понятно, но для меня интерфейс – просто ужасен, китайский изучить проще, все кажется абсолютно нелогичным. Прошел туториал по созданию 2D платформера и понял, что уж слишком ко многому надо привыкать, заствака Unity в игре раздражает, плагины и общее взаимодействие со средой раздражает. Решил, что не готов мириться с этим и перешел к другому варианту.


Cocos2d-x – очень косит под стиль Unity, но сильно проще по функционалу. Сделал по урокам игрушку тестовую. Начал проверять на производительность движка, так он и с батчингом еле тянет несколько анимаций. Очень уж тормозной движок.

Разработка новой модели велосипеда


Можно было еще попробовать кучу разных, но даже опыт установки и удаления этих движков и студий неприятный. Вспомнил, что писал как-то давно движок на OpenGL под винду, а потом и на Stage3D. Решил, раз уж все равно для развлечения, то сама задача разработки своего простенького движка достаточно интересна. Пугало только, что для каждой ОС на столько разные среды разработки и предпочтительные языки программирования.


Сначала определим, что мне лично нужно от простейшего 2D движка:

• Отображение статичных/анимированных спрайтов с возможностью изменения: position, rotation, scale, skew, alpha, brightness, colorTransform, visible, управление отдельными анимациями, камера, иерархия объектов;

• Работа со SpriteSheet-ами;

• Обработчики клавиатуры и мыши/тачпада;

• Воспроизведение звуков;

• Файлы сохранений;

• Шрифты и элементы GUI.


Желательно, чтобы движок был и на одном языке программирования, переводить код игры под каждую платформу не очень радует. Мне желательно C/C++. Приступим изучать, что там как.


Android (Android Studio)

Очень много всего удобного для работы с Android, примеры, оформлялки иконок, скриншотов под все версии, удобный дебагер. Минус – практически не предназначен для работы с C/C++, синтаксис едва разбирает, подсказки по коду ждать бесполезно, очень все долго. Сам принцип взаимодействия Java и C/C++ не удобен, но худо бедно работает. Еще кстати размер APK сильно растет, потому что для каждой архитектуры процессора отдельная компиляция.

Тестирование небольшого движка для мобильных 2D онлайн игр. Игровой движок, 2D, Android, iOS, Benchmark, Бенчмарк, Длиннопост

Расстроило то, что очень много ручного труда с кодом. Даже переименовать проект очень сложно. На некоторых телефонах код на NDK очень долго не стартует, то ли проверки какие-то идут, то ли еще что, просто даже не начинается инициализация. Очень много проблем с обработкой на стороне C/C++ событий паузы, остановки и восстановления приложения. Java рушит все дескрипторы, выданные C/C++ и потоки сишные после OnResume могу стартануть, а могут и помереть. В общем приходиться для надежности заново инициализировать движок и запускать потоки. Запросы из Java в NDK передаются местами в разных потоках, нужно следить за синхронизацией.


Технически использовал OpenGL ES 2.0, со звуками OpenAL, файлы пришлось просить грузить Java, все остальное в принципе, как для Linux, код сразу подошел. По сути переводил свой движок старый, написанный под Windows, писал так, чтобы без изменений компилировалось и под винду (море директив препроцессора). Работает очень быстро, но запускаться приложение может очень долго, притом не начиная никаких инициализаций и загрузок движка.

Вывод: Android не очень жалует C/C++, NDK чисто для вычислений сложных.


IOS (Xcode)

Никогда до этого не работал в Mac OS. Сначала решил ознакомиться с хакинтошами, для ознакомления сойдет, но работать там с Xcode очень неудобно, проблемы с драйверами, в общем не для этого он.


Решил сделать себе подарок на день рождения и приобрести Mac Mini на выигрышные деньги с конкурсов по программированию. С эти уже можно работать. Лицензию разработчика пока так и не взял, проверяю на эмуляторе только, надо бы прикупить б/у смартфон.


Никогда до этого не сталкивался ни с маками, ни с их средой разработки. Думал будет еще хуже, чем с Android. Но оказалось, что среда достаточно дружелюбная, а код на C/C++ встраивается очень удобно и быстро в Objective-C. Неожиданно, но пару дней разбирательств с IOS + Xcode и движок завелся с небольшими изменениями. Половина кода помечена как deprecated, надеюсь еще протянет OpenGL ES на IOS, а то пока сделаю игру, перестанут поддерживать, уж очень хочется каждой корпорации подсаживать на свои технологии разработчиков. Жаль, я не тестировал на реальных устройствах, но займусь как-нибудь.


Для Mac OS и Linux тоже набросал сборки, но подумал, что пока они не очень перспективны для игр. В общем, не так страшен черт, как его малюют. Если тестировать, конечно, еще море исправлений потребуется, да и движок достаточно топорный, но на любительском уровне задача решена.


Сам никому не советую этим заниматься, никогда не окупиться это дело. Готовые движки, конечно, гораздо лучше использовать, куча профессионалов постоянно шлифуют и улучшают, да и готовых крутых решений из коробки очень много. Не теряйте время и силы, разрабатывайте игры.


Сервер

Совсем забыл про сервер для онлайн игр. А я его почти без изменений взял из своих старых проектов: C++, MySQL на Debian Linux. Самый обыкновенный многопоточный сервер с возможностью фоново скидывать данные в базу, логами и прочими мелочами.


Bunny Benchmark

Для тестирования движка и сбора некоторой статистики по устройствам разработал на движке небольшой benchmark, для проверки на сколько ваше устройство пригодно для игр. Бенчмарк грузит в различных режимах работы GPU и CPU, стабилизируя рендер на 30 fps, старым добрым тестом со скачущими кроликами. Также проверяется сетевое взаимодействие (автоматическая регистрация, аутентификация и обмен данными с сервером). Только учтите, у меня сервер – это VPS за 140 рублей в месяц, в описании которого написано: «Для статичных HTML сайтов». А я на нем еще кучу проектов тестирую.

Тестирование небольшого движка для мобильных 2D онлайн игр. Игровой движок, 2D, Android, iOS, Benchmark, Бенчмарк, Длиннопост
Тестирование небольшого движка для мобильных 2D онлайн игр. Игровой движок, 2D, Android, iOS, Benchmark, Бенчмарк, Длиннопост

Пока только на Android, если кому интересно, могу выложить для сборку под Windows, но ваши результаты будут игнорироваться в рейтинге, ибо рейтинг для мобилок. Собираю статистику работы движка и возникшие проблемы на различных устройствах. Из того, что уже заметил: при большом разрешении устройства летит верстка спрайтов.

Теперь можно отвлечься на что-нибудь другое, а потом приступать к разработке онлайн игрушки для мобилок.

Удачных выходных.

Лига Разработчиков Видеоигр

6.6K постов22.1K подписчиков

Добавить пост

Правила сообщества

ОБЩИЕ ПРАВИЛА:

- Уважайте чужой труд и используйте конструктивную критику

- Не занимайтесь саморекламой, пишите качественные и интересные посты

- Никакой политики


СТОИТ ПУБЛИКОВАТЬ:

- Посты о Вашей игре с историей её разработки и описанием полученного опыта

- Обучающие материалы, туториалы

- Интервью с опытными разработчиками

- Анонсы бесплатных мероприятий для разработчиков и истории их посещения;
- Ваши работы, если Вы художник/композитор и хотите поделиться ими на безвозмездной основе

НЕ СТОИТ ПУБЛИКОВАТЬ:

- Посты, содержащие только вопрос или просьбу помочь
- Посты, содержащие только идею игры

- Посты, единственная цель которых - набор команды для разработки игры

- Посты, не относящиеся к тематике сообщества

Подобные посты по решению администрации могут быть перемещены из сообщества в общую ленту.

ЗАПРЕЩЕНО:

- Публиковать бессодержательные посты с рекламой Вашего проекта (см. следующий пункт), а также все прочие посты, содержащие рекламу/рекламные интеграции

- Выдавать чужой труд за свой

Подобные посты будут перемещены из сообщества в общую ленту, а их авторы по решению администрации могут быть внесены в игнор-лист сообщества.


О РАЗМЕЩЕНИИ ССЫЛОК:

Ссылка на сторонний ресурс, связанный с игрой, допускается только при следующих условиях:

- Пост должен быть содержательным и интересным для пользователей, нести пользу для сообщества

- Ссылка должна размещаться непосредственно в начале или конце поста и только один раз

- Cсылка размещается в формате: "Страница игры в Steam: URL"

2
Автор поста оценил этот комментарий

Зацени, делал много лет назад, что-то знакомое :D

Иллюстрация к комментарию
раскрыть ветку
1
Автор поста оценил этот комментарий
Попробуйте Corona sdk. Абсолютно бесплатный, быстрый. Предпросмотр на компе за секунды.

Можно в один клик портировать приложения для разных устройств и платформ:
Apple iPhone и iPad, Android, Amazon Fire, macOS, Windows, а также Apple TV, Fire TV и Android TV, HTML5.

Язык программирования lua. Есть бесплатные плагины и решения для рекламы и покупок.
раскрыть ветку
Автор поста оценил этот комментарий

"Basic 4 android" - неплохая среда для написания на бэйсике прог под андроед. Компилит их в реальные APK, малого размера. Вобщем типа Андроид Студио только на бэйсике и без гемороя

Автор поста оценил этот комментарий
но для меня интерфейс – просто ужасен

Вы еще популярный анрил не запускали, который кстати для мобилок вываливает исполняемый файл размером больше, чем половина сторов позволяет загрузить. И сами игры из него начинают работать только на средних мобилках.


Может вам стоит начать писать просто на html + js прям в консоле браузера? А то браузером же каждый день пользуетесь, прывыкли уже, все удобно. А потом схороните код в файлик, через бесплатную прогу сделаете apk и готово.


Есть еще gamemaker с умершим делфи-синтаксисом и полу драг-н-дроп написанием кода и интерфейсом из 99го, но за то популярный жи.


Умиляют люди создающие темы с вопросом "на чем писать?1?" - не узнаешь пока сам не попробуешь двежки.

раскрыть ветку
Автор поста оценил этот комментарий

Если необходимо с++, то marmalade sdk посмотри, но они вроде бы перестанут скоро его саппортить(

Сам писал на adobe air + starling года 3 игрульки на работе и при должной работе с ресурсами и анимация и не перегруженными все там замечательно в 2д играх) Только вот экстеншены под мобильные искать это да... Но тут дело такое, что раз нашел и подключил, да не париться, обычно без танцев с бубнами все)

Последние пару лет педалью на юнити и интерфейс под себя если более настроить или и если что то уж сильно не нравится и нужно, то можно самому запилить необходимое или расширить готовое решение) А так с работой более чем достаточно справляется и даже лучше из-за гибкости )

раскрыть ветку