программирование
March 7, 2022

Flutter: Игорь тонет или нет?

Flutter – замечательное кросс-платформенное решение для разработки приложений различной сложности. Однако, в контексте игр, по словам самих разработчиков, оно уступает таким фреймворкам как Unity и Unreal Engine (особенно если речь идёт о сложных 3д-проектах).

While you can create simple 2D games using Flutter, for complex 2D and 3D games, you’d probably prefer to base your app on a cross-platform game engine technology like Unity or Unreal. They have more domain-specific features like physics, sprite and asset management, game state management, multiplayer support and so on.

https://www.raywenderlich.com/books/flutter-apprentice/v2.0/chapters/1-getting-started#toc-chapter-007-anchor-001
Персонаж Дрейк из игры Uncharted, ставшей мемом из-за «мыльной» графики в играх на консолях того времени и малого количества игр по мнению «ПеКа-бояр».

Тем не менее, для Flutter существует довольно функциональная библиотека для создания 2д-игр под названием Flame. Её возможностей будет достаточно для создания 2д-платформеров, файтингов, визуальных новелл и т.п.. Ознакомиться с возможностями движка можно по этой ссылке.

Лично я, в данный момент, занимаюсь разработкой каркаса для визуальных новелл (меню, интерфейс, декорации, персонажи и прочие ключевые элементы для игры этого жанра). По задумке, этот каркас можно будет брать за основу и быстро привносить фантазии и мечты авторов в жизнь. Пока всё в зачаточном состоянии. Может быть, позже расскажу о проекте подробнее.

Фрагмент игрового процесса из тестового проекта по вселенной Phoenix Wright: Ace Attorney на движке Flame. Реализованы декорации, движения и анимации персонажа, а так же диалоговое окно.

Также для Flutter есть мощный инструмент под названием Rive. Он позволяет делать качественные анимации и «зашивать» в них логику. Это будут не просто «гифки», а нечто, обладающее «машиной состояний» (state machine). Создаваемые анимации будут опираться на ваш код и переменные в нём. Доступны типы переменных bool (истина/ложь), num (числа), а также триггеры.

Демонстрация проектов, созданных с помощью инструментов Rive. Можете самостоятельно ознакомиться с ними на официальном сайте, пролистав немного вниз.

В вашем арсенале доступны инструменты анимирования с помощью временной ленты и расстановки ключей (вы определяете, в каком состоянии будет находиться объект в заданное время). Его можно разбить на составные части и перемещать их в пространстве с помощью костей, отвечающих за взаимосвязанное движение всех элементов «скелета».

Интерфейс проекта
Небольшое промо-видео с демонстрацией проектов, выполненных с использованием растровой графики.

Несмотря на то, что Flutter не назовёшь специализированным решением для разработки игр, не всё так грустно, как могло бы быть.

Связка Flutter+Flame вам подойдёт, если:
– Вы уже умеете писать проекты на Dart/Flutter, но у вас нет опыта разработки в Unity или Unreal Engine;
– Вы разрабатываете 2D, а не 3D проект (с 3D во флаттере пока грустновато и изменений в ближайшей перспективе не предвидится);
– Вам хочется углубиться в различные детали и ньюансы разработки игр, так как придётся реализовывать много функционала, изначально доступного на заточенных под игры фреймворках, но не доступного в связке Flutter+Flame.