Это звучит слишком хорошо, чтобы быть правдой, верно? Что, если я скажу вам, что это не так. Не верите мне? Держись, и ты увидишь.

вступление

Давайте начнем с настоящего вопроса: зачем кому-то создавать игры во Flutter? Есть много зрелых игровых движков, таких как Unity, Unreal Engine, Godot и другие, которые неплохо справляются с этой задачей, так зачем кому-то создавать игру на Flutter?

Перейду сразу к делу: вы не сможете создавать игры ААА-класса во Flutter (по крайней мере, пока), но вы можете создавать хорошие 2D-игры с отличной производительностью и другими полезными вещами, используя свой любимый язык программирования Dart. . Итак, чтобы ответить на вопрос, это просто для развлечения или потенциально для охвата огромной аудитории на всех платформах, это зависит от того, насколько вы серьезны.

Вы сможете экспортировать игру для всех платформ, как и любое другое созданное вами приложение Flutter. У Flame есть стабильная версия (v.1.0.0), и она готова для производственных приложений. Они предлагают 2D-игровой движок наряду с 2D-физикой, звуком, анимацией и многим другим (имейте в виду, что не все компоненты еще готовы к производству, подробности смотрите здесь).

Знакомство с Пламенем

Мой опыт создания моей первой игры просто потрясающий и в то же время запутанный. У Flame есть свои виджеты, называемые components, которые похожи на виджеты Flutter, поэтому переключение между ними, чтобы знать, что использовать, когда и где, может быть проблемой.

При этом это не означает, что они взаимозаменяемы, и вы не можете поместить компонент Flame непосредственно в дерево Flutter или наоборот! Чтобы поместить компонент Flame в дерево виджетов Flutter, мы должен использовать «связующий» виджет под названием GameWidget.

Все, что я могу сказать, это то, что это другое! Иногда вам нужно нарушать правила и следовать своему чутью, а иногда вам просто нужно реорганизовать то, что вы сделали. Это все еще новая и неизведанная территория, поэтому нам нужно время, чтобы привыкнуть к ней! Но, черт возьми, разработка идет молниеносно, как и при разработке обычного приложения (особенно если сравнивать с Unity или Unreal, которые намного медленнее).

Я создал простую игру с лопанием воздушных шаров с фоновым изображением, различными типами воздушных шаров, фоновой музыкой, эффектами лопающихся воздушных шаров и счетами менее чем за день, имея нулевой опыт работы с движком Flames. (PS. извините за тему свинки Пеппы, я сделал эту игру для своего сына). Если вам интересно, как выглядит код, посмотрите сами здесь.

Испытания

Одна из проблем, с которыми я столкнулся при создании этой игры, заключалась в том, чтобы попытаться думать не как разработчик Flutter, а как разработчик гибридной игры/приложения.

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

Реализация с помощью Flames Bloc на другой стороне была совсем другой и казалась хакерской. При использовании Flutter Bloc вы можете указать локоть/блок, используя BlocProvider, который одинаков для Flames Bloc.

При использовании cubit/bloc ссылка получается через вызов метода context.read() в виджете, тогда как во Flame требуется ссылка на FlameBlocGame (в компоненте это достигается расширением миксина HasGameRef).

Прослушивание изменений требует расширения миксина BlocComponent и переопределения onNewStateметода, который вызывается при изменении состояния.

У Flame есть хорошая документация и примеры на GitHub. Я просто хочу, чтобы он больше ориентировался на новичков, а не на опытных людей, которые были там с самого начала. В целом, это был приятный опыт, и я верю, что у Flutter и Flame большое будущее!

В следующей статье я сосредоточусь на том, как создать клон Flappy Bird в Flame.

Спасибо за прочтение.