Тестирование небольшого движка для мобильных 2D онлайн игр.
Здравствуйте, захотелось как-то мне разработать небольшую онлайн игру для мобилок. По работе в основном пишу драйвера и прошивки для устройств. Но было время – разрабатывал небольшие Flash игры, браузерки, потом игры для соц.сетей, и пару лет работал программистом в крупной игровой компании. Понял, что в качестве профессиональной деятельности за зарплату мне этим заниматься не интересно. Поэтому теперь разрабатываю игры в качестве одного из хобби.
Так вот, хочу сделать небольшой онлайн батлер для мобилок и столкнулся с проблемой выбора движка под это дело
Хотелось сильно не заморачиваться и сразу приступать к разработке. Движков нынче пруд пруди. Чего мне от движка хотелось:
• Более менее знакомый язык программирования;
• Бесплатный и доступный в освоении;
• Поддержка сетевого взаимодействия по 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 сильно растет, потому что для каждой архитектуры процессора отдельная компиляция.
Расстроило то, что очень много ручного труда с кодом. Даже переименовать проект очень сложно. На некоторых телефонах код на 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 сайтов». А я на нем еще кучу проектов тестирую.
Пока только на Android, если кому интересно, могу выложить для сборку под Windows, но ваши результаты будут игнорироваться в рейтинге, ибо рейтинг для мобилок. Собираю статистику работы движка и возникшие проблемы на различных устройствах. Из того, что уже заметил: при большом разрешении устройства летит верстка спрайтов.
Теперь можно отвлечься на что-нибудь другое, а потом приступать к разработке онлайн игрушки для мобилок.
Удачных выходных.
Зацени, делал много лет назад, что-то знакомое :D
Можно в один клик портировать приложения для разных устройств и платформ:
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д играх) Только вот экстеншены под мобильные искать это да... Но тут дело такое, что раз нашел и подключил, да не париться, обычно без танцев с бубнами все)
Последние пару лет педалью на юнити и интерфейс под себя если более настроить или и если что то уж сильно не нравится и нужно, то можно самому запилить необходимое или расширить готовое решение) А так с работой более чем достаточно справляется и даже лучше из-за гибкости )