что такое кросс платформа в играх
Кроссплатформенность — это круто
Ни для кого не секрет, что сегодня мобильные игры очень популярны. Возможность написать одну из таких игр есть у каждого разработчика, даже начинающего. Часто возникает вопрос с выбором платформы. Конечно, хочется, чтобы игра была сразу везде: на iOS и Android, на WP7 и MeeGo, на десктопе и в браузере. И чтобы все это можно было лекго реализовать с помощью бесплатных инструментов.
В этой статье я расскажу вам, как сделать основную часть кода платформонезависимой, а для остального использовать удобные средства разработки для каждой конкретной платформы.
Цель игры, изображенной на рисунке выше — успеть попасть по яблоку, пока оно летит вниз. Со временем количество яблок увеличивается, и не пропускать их становится все сложнее. Яблоки падают под произвольным углом, вращаясь и реалистично отскакивая от границ благодаря физическому движку Box2D. Игра будет запускаться на Android, платформах с поддержкой Qt (Symbian, Maemo, MeeGo, Windows, Linux, Mac OS X) и в браузере Google Chrome.
Выбор удобных инструментов
Так как основную часть кода я буду писать на чистом С++ (почему, читайте в конце статьи), IDE для этого подойдет любая. Я выберу Qt Creator, хотя ничего не мешает мне использовать Microsoft Visual Studio или Eclipse, например.
Для платформы Android я остановлюсь на библиотеке libgdx. С ее помощью легко можно рисовать текстуры, проигрывать звуки и делать другие необходимые вещи.
В качестве инструмента для разработки игры на десктопе я возьму Qt. Я давно знаком с этой библиотекой, и она не перестает меня радовать. При использовании Qt я также получу приятный бонус в виде поддержки мобильных операционных систем Symbian, Maemo и MeeGo.
Также специально для этой статьи я с помощью HTML5, javascript и Google Native Client сделаю так, чтобы игра запускалась в браузере Google Chrome. Я буду использовать HTML5 Canvas и Audio, и вы увидите, насколько это легко и просто.
Реализация логики не сложная, поэтому я не буду писать о ней (желающие могут взглянуть на код). Вместо этого я сконцентрируюсь на том, как заставить игру работать на всех операционных системах.
Абстрагируемся от конечной платформы
Как я уже говорил, основная часть кода будет общей для всех платформ. Назовем ее «движок». Мне нужно будет решить две задачи. Первая — вызов методов движка на каждой платформе:
Для этого движок предоставит платформам следующий интерфейс:
Вызовы обработчиков рисования и ввода на различных платформах будут вызывать методы из класса Application, например, при использовании Qt это будет выглядеть так:
На Android выйдет немного сложнее, потому что из Java нужно попасть в C++:
После этого в C++ вызываются соответствующие методы:
При использовании Native Client в браузере из javascript нельзя напрямую обращаться к С++, вместо этого надо отправлять сообщения модулю, например, строки:
В С++ сообщения анализируются, и в зависимости от содержания вызывается тот или иной метод:
В итоге движку не важно, из какой платформы был вызов, он абстрагировался от этого. Но он знает, что произошло касание экрана в точке (x, y) или пришло время для обработки физики и вывода изображений на экран.
Обратное взаимодействие
Вторая задача — обратное взаимодействие движка с платформой:
Это нужно для того, чтобы движок командовал, когда выводить изображения и текст на экран, проигрывать звук, вибрировать. Для этого все платформы должны реализовать общий интерфейс. Назовем этот интерфейс Platform:
На уровне движка я не привязываюсь ни к какой конкретной платформе, я не загружаю картинки или аудио файлы, вместо этого я использую числовые идентификаторы. Когда я хочу вывести изображение на экран, или проиграть звук, я делаю следующее:
Таким образом движок абстрагируется от деталей реализации различных операций на каждой платформе. Привожу для наглядности диаграмму классов:
Сложно ли все это сделать? Вы убедитесь в том, что нет. Время, конечно, придется потратить, но в большинстве случаев им можно пренебречь в сравнении со временем, потраченным на программирование логики приложения. Я приведу код для платформ Android, Qt и Native Client для каждой необходимой операции:
Рисование изображения, Android (libgdx):
Рисование изображения, Qt:
Рисование изображения, javascript (HTML5 Canvas):
Рисование текста, Android (libgdx):
Рисование текста, Qt:
Рисование текста, javascript (HTML5 Canvas):
Проигрывание звука, Android (libgdx):
Проигрывание звука, Qt:
Проигрывание звука, javascript (HTML5 Audio):
Вибрация, Android(libgdx):
При реализации для Android придется немного повозиться с вызовом java кода из C++ — один раз получить ID нужных java методов:
и потом вызывать их:
Нетривиальная ситуация и с Native Client — нужно отправлять сообщения из С++ кода в javascript:
И в javascript эти сообщения парсить:
Результат
Эта простая игра называется «Поймай яблочко». Предлагаю запустить и попробовать продержаться пару минут, у меня вначале не получалось:
— Native Client версия (убедитесь, что у вас последняя версия браузера Google Chrome, и Native Client включен в about:plugins и about:flags). Размер исполняемого файла nexe — 4.2Мб для 32-битных систем и 4.9Мб для 64-битных, при медленном соединении придется немного подождать;
— Windows версия — для тех, кто не любит Google Chrome.
Игра прекрасно запускается на Android эмуляторе и моем LG Optimus. Та же ситуация с Qt Simulator (скриншот с Nokia N9 в самом начале темы).
Код можно взять тут, я думаю, он может пригодиться кому-нибудь, особенно участки, которые отвечают за связку Java и C++, javascript и C++ (если по этому поводу у вас возникнут вопросы — задавайте, не стесняйтесь, с удовольствием отвечу).
Зачем все это?
Многие из вас подумают, зачем писать велосипед? Если есть Marmalade или Unity, например. Есть, но они стоят денег, да и зачем такие тяжеловесы для простой 2D игрушки? Некоторые говорят также, что Qt заводится на Android и iOS, но на самом деле на Android не очень так заводится, без звука и OpenGL, а на iOS так вообще, только ролики на YouTube. Мне очень нравится Qt, и я надеюсь, что в недалеком будущем приложения для iOS и Android можно будет писать так же просто, как сейчас для MeeGo, но пока лучше пользоваться другими инструментами для этих платформ.
Преимущества
Используя подход, описанный в этой статье, вы не привязаны к платформе, вы можете использовать те инструменты, которые хотите, а в последующем легко их менять. На десктопе — Qt или GTK, на Android — libgdx или AndEngine, на iOS — cocos2d, выбор за вами. Можете вовсе отказаться от движков, используя API, предоставляемое платформой. Большую часть времени вы можете писать и отлаживать код в вашей любимой IDE на великом и могучем C++.
Недостатки
Недостатки, конечно, тоже есть, например, вы не сможете пользоваться готовыми UI компонентами — вам нужно будет реализовать их на C++. Либо выносить UI часть приложения в каждую платформу. Также вам обязательно придется тесно познакомиться с каждой платформой, но как показывает практика, полностью уйти от этого знакомства никогда не удается.
Список игр с кроссплеем между ПК, PS4, Xbox One, Nintendo Switch и смартфонами
Ещё пару лет назад о кроссплатформенных играх можно было только мечтать, но сейчас ситуация кардинально изменилась. После длительных споров гиганты вроде Sony, Nintendo и даже EA пришли к выводу, что от внедрения кроссплея выиграют все — и игроки, и разработчики, и издатели. К сожалению, пока что этим бонусом могут похвастаться далеко не все релизы, но у геймера уже есть довольно приличный список проектов на выбор. Я собрал их все, чтобы читателю не нужно было рыскать по всему интернету в поисках полного списка игр с поддержкой кроссплея. Эта статья представляет из себя список игр, в которые можно играть с другом по сети Интернет на разных устройствах: компьютере, консолях, телефонах.
Содержание
Полная поддержка кроссплея
В списке полностью кроссплатформенных проектов доминируют соревновательные шутеры, королевские битвы и ММО. Но, к счастью, постепенно этот список дополняется новыми релизами, среди которых есть и гонки, и ролевые игры, и даже хорроры.
Among Us
Apex Legends
ПК, PS4, Xbox One, Switch
Brawlhalla
ПК, PS4, Xbox One, Switch
Call of Duty: Modern Warfare
Call of Duty: Warzone
Chivalry II
ПК, PS4, PS5, Xbox One, Xbox Series X|S
Dauntless
ПК, PS4, Xbox One, Switch
Dead by Daylight
ПК, PS4, Xbox One, Switch
Fantasy Strike
Fortnite
ПК, PS4, Xbox One, Switch, Android, iOS
Genshin Impact
ПК, PS4, Android, iOS
Hyper Scape
Minecraft
ПК, PS4, Xbox One, Switch, Android, iOS
Need for Speed: Heat
No Man’s Sky
Paladins: Champions of the Realm
ПК, PS4, Xbox One, Switch
Predator – Hunting Grounds
Power Rangers: Battle for the Grid
ПК, PS4, Xbox One, Switch
Realm Royale
ПК, PS4, Xbox One, Switch
Rocket Arena
Rocket League
ПК, PS4, Xbox One, Switch
Rogue Company
ПК, PS4, Xbox One, Switch
SMITE
ПК, PS4, Xbox One, Switch
Star Wars: Squadrons
Super Mega Baseball 2
ПК, PS4, Xbox One, Switch
Spellbreak
ПК (Epic Games Store), Xbox One, PS4, Switch
World of Warships: Legends
Частичная поддержка кроссплея
Также на рынке видеоигр есть масса проектов, которые поддерживают кроссплей, но только на некоторых платформах. Например, есть игры, которые работают только на ПК и одной из консолей, но не поддерживают совместную игру с другими приставками. Все эти игры перечислены ниже. Разделение на две строчки в списке означает поддержку кросспплея для отдельных платформ.
#IDARB
Atom Universe
Aragami
ПК, Xbox One, Switch
Ark: Survival Evolved
ПК, PS4, Xbox One, Switch
Astroneer
Atom Universe
Black Desert Online
Blobcat
Borderlands 3
Steam, Epic Games Store
Boundless
Chess Ultra
ПК, PS4, Xbox One, Switch
Crazy Justice
ПК, Xbox One, Switch
Dawn of the Breakers
DC Universe Online
Deep Rock Galactic
Dick Wilde 2
Disc Jam
Dragon Quest Builders 2
Eagle Flight
Eve: Valkyrie
Exorder
Final Fantasy XIV: A Realm Reborn
Final Fantasy XV
Full Metal Furies
Games of Glory
Guns of Icarus Online
Happy Wars
Hearthstone
ПК, MacOS, Android, iOS
Hero Siege
ПК, MacOS, Android, iOS, Switch
ПК, MacOS, PS4, Android, iOS
Hover
ПК, Xbox One, Nintendo Switch
Kabounce
Killer Queen Black
ПК, Xbox One, Switch
Mantis Burn Racing
ПК, Xbox One, Switch
Mortal Kombat 11
PS4, Xbox One, Switch
Mushroom Wars 2
ПК, MacOS, Switch, Android, iOS
NBA 2K Playgrounds 2
ПК, PS4, Xbox One, Switch
Neverwinter
ПК, Xbox One, Switch
Next Up Hero
ПК, MacOS, Xbox One, Switch
Onigiri
Overload
Phantasy Star Online 2
Pinball FX 3
ПК, Xbox One, Switch
PlayerUnknown’s Battlegrounds
Pox Nora
Pure Chess
Rec Room
Riptide GP Renegade
ПК, Nintendo Switch
Roblox
ПК, MacOS, Xbox One, Android, iOS
Siegecraft Commander
ПК, Xbox One, Switch
Sniper Elite V2 Remastered
ПК, PS4, Xbox One, Switch
Spacelords
Sports Bar VR
Square Heroes
Star Trek: Bridge Crew
Street Fighter V
Super Dungeon Bros
Tooth and Tail
Trailblazers
ПК, Xbox One, Switch
Treasure Stack
ПК, Xbox One, Switch
Ultimate Chicken Horse
Wargroove
ПК, PS4, Xbox One, Switch
War Thunder
ПК, MacOS, PS4, Xbox One
Weapons of Mythology: New Age
Werewolves Within
World of Tanks
World War Z
ПК (Epic Games Store), Xbox One
Поддержка кроссплея Xbox Play Anywhere
Инициатива Microsoft Play Anywhere позволяет геймеру приобрести игру на ПК или Xbox One, а играть потом на обеих платформах. Кроме того, некоторые игры из этого списка даже поддерживают кроссплей.
Нужен ли кроссплей сетевым шутерам (Apex Legends, Black Ops – Cold War и другим)?
В этой статье мы с вами обсудим то, как в сетевых шутерах реализуется кроссплей, нужен ли он шутерам, какие у кроссплея есть плюсы и минусы, а также есть ли какие-то перспективы у кроссплатформы между консолями и ПК, или это просто временный тренд, от которого разработчики в скором времени откажутся?
Для удобства восприятия информации эти два понятия мы разделять не будем и в дальнейшем, говоря о кроссплатформе или кроссплее, я буду иметь в виду возможность одновременной игры с различных платформ.
История кроссплея
Идея объединить игроков с различных игровых устройств не нова, так приставка Sega Dreamcast еще в 1998 году была оснащена модемом, что позволяло ее владельцем играть совместно с пользователями ПК в такие игры, как Maximum Pool, Quake 3 Arena и некоторые другие.
В 2002 году Sony продемонстрировала возможность онлайн-игры между PlayStation 2 и компьютерами в Final Fantasy 11.
А в 2012 году функция кроссплатформенной игры между PlayStation 3 и ПК была убрана из игры Counter-Strike: Global Offensive буквально за несколько месяцев до релиза. Негласной причиной являлось несоответствие серверов Sony стандартам Valve.
Все это говорит о том, что всегда существовали некоторые практические ограничения для кроссплатформы. Главная техническая проблема, с которой сталкивается кроссплатформенная игра на консолях, – это сетевая связь между платформами, которые управляются различными протоколами.
Однако в середине сентября 2017 года данные технические ограничения удалось преодолеть, в результате чего кросспплей на короткое время позволил игрокам на компьютере, PlayStation 4 и Xbox One играть вместе в Fortnite.
Время шло, и уже в 2019 году возможность играть вместе владельцам основных консолей и ПК была предоставлена на постоянной основе все в той же Fortnite. Затем аналогичная функция кроссплея появилась в Rocket League, Minecraft и Call of Duty: Modern Warfare (2019).
Как вы, наверное, успели заметить, 4 последние упомянутые мной игры являются шутерами, т.е. играми, где помимо скила, многое решает AIM (АИМ) или скорость наведения на цель. А как вы сами понимаете, при кроссплаформенной игре лоб в лоб сталкиваются игроки на геймпаде и на клавиатуре с мышкой.
Как играть на Android с помощью геймпада, клавиатуры или мышки. Настройка Panda Pro
Я сейчас не буду говорить, что тот или иной девайс для управления лучше, к этой теме я вернусь чуть позже, а вот вам предлагаю написать в комментариях под этим постом, что же круче, по вашему мнению, клавиатура и мышь или геймпад?
Если с кроссплеем между ПК и основными консолями все более или менее ясно, то с кроссплеем между современными приставками все гораздо сложнее. Так, компания Sony изначально не хотела разрешать кроссплатформенную игру с другими консолями в течение первых пяти лет после выхода PS4. 26 сентября 2018 года Sony объявила, что разрешит кроссплатформенную игру на PlayStation 4 «для избранного стороннего контента» и в тот же заявила, что решение разрешить кроссплатформенную игру между консолями было «серьезным изменением политики компании».
Также руководство Sony отмечало, что кроссплатформенная игра будет пользоваться большим спросом у игроков PlayStation 4. Одними из первых игр с поддержкой кроссплея между приставками от Sony и Microsoft стала PUBG (примерно с октября 19 года), потом подтянулись Black Desert, World of Tanks и еще несколько игр.
Если я, по вашему мнению, что-то упустил, то прошу отметить это в комментариях, а мы едем дальше.
Минусы кроссплея
Первый и самый главный минус – это читеры с ПК.
Да-да-да, вы можете сказать, что это так банально, но это факт. После открытой беты кроссплея Black Ops Cold War западные игроки на форумах, да и отечественные ютуберы и игроки стали активно обсуждать эту проблему.
И тут вы можете сказать: «подожди, Максим, так разве в том же Warzone не было большого количества банов за читы?» Да, были, вы правы, но именно бета Cold War показала, насколько невыносимой может стать игра, когда никто не банит читаков, и это как раз взволновало игроков, особенно консольщиков, которые тут же предложили ограничить кроссплей исключительно между консолями от Microsoft и Sony.
Не то чтобы среди консольщиков нет читеров, они, конечно, есть, как есть и прошитые консоли и все такое прочее, но таких консольщиков по сравнению с читерами на ПК значительно меньше. Потому что если вы читерите на ПК, то рискуете получить бан учетки в какой-то игре стоимостью до 2-3 тысяч рублей, а вот забаненная консоль стоимостью 15-20 тысяч рублей это уже совсем другой разговор.
Таким образом, я думаю, что читеры – это самая главная проблема кроcсплея. И это то, что может погубить кросплей как постоянную функцию в сетевых шутерах.
Второй минус – это консервативность самих игроков.
Согласитесь, что большинство из нас обладает средними навыками игры, включая навыки управления мышью и геймпадом. И только единицы обладают талантом или даром играть как про хоть на геймпаде, хоть на клаве-мыши. Так вот, человек является существом слегка боязливым и не любящим выходить из зоны комфорта, поэтому вряд ли большинство из нас пойдет играть с игроками на противоположной платформе без особой на то нужды.
Как будет рассуждать игрок с ПК: «Ага, да что там эти клоуны со своими джойстиками, на которых не иначе как клешнями играть не получится, я их быстренько всех уделаю под орех.» Врубает такой игрок кросплей, натыкается на ребят с подключенными к консоли клавой и мышью, на тех же читаков или более скиловых игроков на геймпаде, ловит когнитивный диссонанс и. вырубает кроссплей, мол, да ну его, там одни читаки и эмуляторщики, пойду-ка, затащу еще одну каточку в *подставте название игры без кроссплея*.
Конечно, я это говорю не без доли иронии, но вы должны понимать, что такие сценарии вполне себе реалистичны.
И последний минус, даже скорее не минус, давайте назовем это ньюансом кроссплея.
Это некое незначительное преимущество мышки перед геймпадом.
И прежде чем ставить дизлайки этому посту, давайте я вам сейчас все объясню…
Я перешел с ПК на консоли более 5 лет назад и вначале я очень страдал в шутерах от первого лица, геймпад мне казался дико неудобным, но со временем мой АИМ улучшился, я адаптировался, и в некоторых шутерах мой показатель КД даже вырос.
Не согласны? Тогда давайте проведем эксперимент, возьмите лист бумаги формата а4, положите ближе к верхнему краю листа коробок спичек, телефон или там шоколадку и обведите его, а теперь положите уже на противоположную часть листа вашу шоколадку или что вы там взяли.
А затем попробуйте сначала только большим пальцем передвинуть ваш предмет, не отрывая его от листа, четко на обведенную вами область, а затем проделайте то же самое тремя или 4мя пальцами.
Думаю, разница будет очевидна, а моя мысль ясна. Хотите сказать, спорный ньюанс? Согласен, прошу в комментариях изложить свою позицию!
Ну, с минусами закончили, переходим к плюсам.
Плюсы кроссплея
Самый очевидный плюс – это возможность играть вместе с друзьями, у которых нет приставки или компьютера в одну игру. Если вы думаете, что такое редкость, то нет, вполне себе частое явление. Как пример могу привести свою ситуацию: у большинства моих друзей нет PS4 (да и вряд ли им она вообще понадобится), в связи с чем, по сути, единственным способом нам вместе поиграть в тот же Apex Legends является кроссплей.
Вторым несомненным плюсом является объединение комьюнити. Никто из игроков не чувствует себя замкнутым в некой резервации, что позволяет игрокам не только свободно взаимодействовать друг с другом, но и общаться сразу внутри игры, делиться опытом, впечатлениями, находить друзей с различных платформ, т.е. по сути, кроссплей способствует некоему социальному единению геймеров и, возможно, именно благодаря кроссплею мир забудет о всяких консольных войнах.
Третий плюс заключается в том, что большое количество игроков будет способствовать росту популярности отдельных режимов в конкретной игре. Можно вспомнить Battlefield 4, в котором было огромное количество интересных, но при этом мертвых режимов, к примеру, соединение, штурм авианосца и другие.
И последний, но не менее важный плюс, это продление жизни проекту.
Чем больше у игры одновременный онлайн, тем дольше разработчикам будет интересно, а главное, прибыльнее поддерживать их проект.
Я на сто процентов уверен, что если бы Respawn Entertainment по примеру Apex добавила бы возможность кроссплея в Titanfall 2, это моментально оживило бы почти что мертвый мультиплеер данной замечательной игры.
Ну а с плюсами у меня все. Да, вы можете сказать, что вроде их и не очень много, да и все они по большей части сводятся к удобству самих игроков и их объединению. Если вы хотите что-то добавить, прошу вас проследовать в комментарии, где вы сможете поделиться со мной своими мыслями по поводу других положительных сторон кроссплея.
Перспективы
Кроссплей в шутерах входит в активную стадию своего развития. Опыт таких игр, как CoD: MW 19 и Fortnite, показал, что людям с разных платформ нравится играть друг с другом.
Конечно, до проведения киберспортивных мероприятий с использованием кроссплея по шутерам нам еще далеко, но это всего лишь вопрос времени и развития технологий, когда с течением времени способы управления на консоли и на ПК почти перестанут отличаться. А на данный момент тот факт, что именно столь серьезные шутеры внедряют такую функцию, как кроссплей, дает мне все основание полагать, что кроссплей ждет довольно-таки неплохое будущее…
Ну а что думаете вы по этому поводу, напишите в комментариях, что я мог упустить, где вы со мной согласны, а где нет. А также не забывайте подписываться, ставить лайки, ведь впереди нас еще ждет очень много интересного и годного контента.
Всем спасибо, что дочитали до конца! Всем удачи и до новых встреч!