Flutter Templates
Создание многоплатформенной игры с использованием Flutter и Back4app
11 мин
введение flutter — это универсальный фреймворк с открытым исходным кодом от google, который позволяет разработчикам создавать нативно скомпилированные приложения для мобильных устройств, веба, настольных пк и встроенных устройств из единой кодовой базы хотя flutter в первую очередь известен традиционной разработкой приложений, он все чаще используется для разработки игр благодаря своей производительности, обширной экосистеме пакетов и функции горячей перезагрузки в этом руководстве мы пройдем через процесс разработки многоплатформенной игры в стиле flappy bird с использованием flutter и flame, игрового движка, предназначенного для 2d игр на flutter кроме того, мы подключим игру к back4app, платформе бэкенда как услуги (baas), чтобы хранить пользовательские очки и отображать таблицу лидеров к концу этого руководства у вас будет рабочая версия игры, которая будет работать на мобильных и веб платформах, и она будет хранить и извлекать высокие очки из back4app предварительные требования чтобы завершить этот учебник, вам потребуется аккаунт back4app зарегистрируйтесь для получения бесплатного аккаунта на back4app com https //www back4app com среда разработки flutter настроена на вашем локальном компьютере следуйте руководству по установке flutter https //flutter dev/docs/get started/install если вы еще не настроили её базовые знания dart, виджетов flutter и концепций разработки игр шаг 1 – настройка вашего бэкенда back4app создайте проект back4app войдите в свою учетную запись back4app https //dashboard back4app com/ и создайте новый проект создайте классы parse для этого учебника мы настроим простой бэкенд для управления данными, связанными с играми в вашем проекте back4app создайте два класса parse с именами player и gamescore player хранит информацию о игроке, такую как имя пользователя, уровень и достижения gamescore хранит очки и рейтинги для игры получите свои учетные данные back4app перейдите в настройки вашего проекта, чтобы получить ваш идентификатор приложения и ключ клиента, которые вам понадобятся для подключения вашей игры flutter к back4app шаг 2 – настройка вашего проекта flutter создайте новый проект flutter откройте терминал или командную строку и выполните добавьте зависимости откройте pubspec yaml и добавьте следующие зависимости инициализируйте parse в вашем приложении в lib/main dart , импортируйте sdk parse и инициализируйте его в функции main import 'package\ flutter/material dart'; import 'package\ parse server sdk flutter/parse server sdk flutter dart'; import 'package\ flame/flame dart'; import 'package\ flame/game dart'; void main() async { widgetsflutterbinding ensureinitialized(); const keyapplicationid = 'your back4app app id'; const keyclientkey = 'your back4app client key'; const keyparseserverurl = 'https //parseapi back4app com'; await parse() initialize(keyapplicationid, keyparseserverurl, clientkey keyclientkey, autosendsessionid true); runapp(mygameapp()); } class mygameapp extends statelesswidget { @override widget build(buildcontext context) { return materialapp( home gamescreen(), ); } } замените 'your back4app app id' и 'your back4app client key' на ваши фактические учетные данные back4app шаг 3 – настройка игры с использованием flame создайте класс игры flame — это игровой движок с открытым исходным кодом, построенный на основе flutter он предоставляет инструменты и api для создания 2d игр создайте простой класс игры с использованием flame import 'package\ flame/game dart'; import 'package\ flame/components dart'; class mysimplegame extends flamegame { @override future\<void> onload() async { super onload(); add(playercomponent()); } } class playercomponent extends positioncomponent { @override future\<void> onload() async { // load player sprite or set up player visuals here size = vector2(50, 50); // set size of the player position = vector2(100, 100); // set initial position // optionally, add sprite or animations } @override void update(double dt) { // update player state here } @override void render(canvas canvas) { super render(canvas); // draw player visuals final paint = paint() color = colors blue; canvas drawrect(size torect(), paint); } } 2\ создайте экран игры обновите gamescreen виджет, чтобы отобразить игру class gamescreen extends statelesswidget { @override widget build(buildcontext context) { return scaffold( body mysimplegame() widget, ); } } 3\ запустите игру теперь вы можете запустить ваше приложение, используя flutter run чтобы увидеть вашу простую игру в действии вы должны увидеть синий квадрат, представляющий игрока шаг 4 – управление данными игры с помощью back4app сохранение данных игрока далее давайте создадим функцию для сохранения данных игрока в back4app, когда игрок повышает уровень или достигает чего то future\<void> saveplayerdata(string username, int level, list\<string> achievements) async { final player = parseobject('player') set('username', username) set('level', level) set('achievements', achievements); final response = await player save(); if (response success) { print('player data saved successfully'); } else { print('failed to save player data'); } } 2\ получение высоких результатов вы также можете получить высокие результаты вашей игры из back4app, чтобы отобразить их на таблице лидеров future\<list\<parseobject>> fetchhighscores() async { final query = querybuilder\<parseobject>(parseobject('gamescore')) orderbydescending('score') setlimit(10); final response = await query query(); if (response success && response results != null) { return response results as list\<parseobject>; } else { print('failed to fetch high scores'); return \[]; } } 3\ отобразить таблицу лидеров используйте listview\ builder в виджете flutter для отображения 10 лучших результатов class leaderboardscreen extends statefulwidget { @override leaderboardscreenstate createstate() => leaderboardscreenstate(); } class leaderboardscreenstate extends state\<leaderboardscreen> { list\<parseobject> highscores = \[]; @override void initstate() { super initstate(); fetchhighscores() then((scores) { setstate(() { highscores = scores; }); }); } @override widget build(buildcontext context) { return scaffold( appbar appbar(title text('leaderboard')), body listview\ builder( itemcount highscores length, itembuilder (context, index) { final score = highscores\[index]; return listtile( title text(score get\<string>('playerid') ?? 'unknown player'), subtitle text('score ${score get\<int>('score')}'), ); }, ), ); } } шаг 5 – добавление расширенных функций с flame если вы хотите добавить более сложные игровые механики, анимации или взаимодействия, вы можете расширить использование flame, введя дополнительные компоненты, такие как спрайты, физика и обнаружение столкновений flame также поддерживает интеграцию с firebase, что позволяет добавлять многопользовательские функции, покупки внутри приложения и многое другое заключение в этом учебном пособии вы узнали, как использовать flutter и flame для создания простой многоплатформенной игры и как интегрировать back4app для управления игровыми данными, такими как профили игроков и высокие результаты возможность flutter развертываться на нескольких платформах из одного кода, в сочетании с надежными бэкенд сервисами back4app, делает этот стек мощным для разработки и масштабирования игр создавая простую казуальную игру или более сложный интерактивный опыт, flutter и back4app предоставляют инструменты для эффективной разработки, развертывания и управления вашей игрой для получения дополнительной информации ознакомьтесь с документацией flutter https //flutter dev/docs и документацией back4app https //www back4app com/docs удачного кодирования!