Из этого руководства вы узнаете, как создать свою первую Моментальную игру: классическую игру "Крестики-нолики" с передачей хода. В ней будут реализованы обновления и игровой бот. |
После настройки приложения можно приступать к работе с ним.
Теперь приложение настроено, и нужно создать игровой клиент. В корневом каталоге игрового клиента должен быть файл index.html
. Для начала добавьте эту строку, чтобы импортировать SDK Моментальных игр.
<script src="https://connect.facebook.net/en_US/fbinstant.6.2.js"></script>
Важно!
Наш SDK активно использует обещания для асинхронной работы. Вы сможете взаимодействовать с пользовательским интерфейсом скачивания только после разрешения FBInstant.initializeAsync()
.
FBInstant.initializeAsync() .then(function() // Start loading game assets here );
Наш игровой клиент не будет одновременно скачивать весь ваш пакет (файл .zip
). Сначала он найдет файл конфигурации (fbapp-config.json
) и главный файл (index.html
) в корневом каталоге, а затем начнет скачивание объектов согласно логике главного файла. Как разработчик вы можете полностью контролировать порядок и время загрузки своих объектов.
Во время скачивания объектов, необходимых для инициализации игры, вы должны информировать SDK о ходе этой процедуры, чтобы мы могли показывать игрокам индикатор скачивания.
var images = ['sprite1', 'sprite2', ...]; for (var i=0; i < images.length; i++) { var assetName = images[i]; var progress = ((i+1)/images.length) * 100; game.load.image(assetName); // Informs the SDK of loading progress FBInstant.setLoadingProgress(progress); } // Once all assets are loaded, tells the SDK // to end loading view and start the game FBInstant.startGameAsync() .then(function() { // Retrieving context and player information can only be done // once startGameAsync() resolves var contextId = FBInstant.context.getID(); var contextType = FBInstant.context.getType(); var playerName = FBInstant.player.getName(); var playerPic = FBInstant.player.getPhoto(); var playerId = FBInstant.player.getID(); // Once startGameAsync() resolves it also means the loading view has // been removed and the user can see the game viewport game.start(); });
Дополнительную информацию о методах initializeAsync()
, setLoadingProgress()
и startGameAsync()
см. в справке по SDK.
Материалы моментальных игр размещаются в инфраструктуре Facebook, поэтому собственное пространство для хостинга или услуги сторонних поставщиков вам не потребуются. Когда игра будет готова к тестированию, запакуйте ее в один файл ZIP.
Обратите внимание, что файл index.html
должен находиться в корневой папке этого архива.
Чтобы загрузить ZIP-файл, выполните перечисленные ниже действия.
После этого вы сможете протестировать ее на мобильном устройстве. Опубликованная сборка будет добавлена в ваш список игр в Messenger в раздел В разработке.
Чтобы ускорить процесс разработки, можно загрузить сборку из командной строки через API Graph или протестировать ее непосредственно на сервере разработки. Подробнее см. в разделе Тестирование, публикация и доступ к Моментальной игре.
Под контекстом подразумевается любая среда, в которой запускается игра. Как правило, контекст игры — это публикация или группа на Facebook и т. п.
В примере ниже показано, как отправить обновление контекста и как оно выглядит в переписке Messenger.
Чтобы объявить индивидуально настроенные обновления, создайте файл конфигурации fbapp-config.json
и добавьте его в корневой каталог пакета вместе с файлом index.html
.
Подробнее о поддерживаемых конфигурациях см. в разделе Пакетная конфигурация. Для этой демонстрации файл должен быть таким:
{ "instant_games": { "platform_version": "RICH_GAMEPLAY", "custom_update_templates": { "play_turn": { "example": "Edgar played their move" } } } }
Конфигурация шаблона индивидуально настроенного обновления позволяет назначить ID каждому такому обновлению, чтобы их было удобнее анализировать. ID шаблона необходимо назначить всем играм.
updateAsync
Объявленный в файле конфигурации шаблон можно использовать для заполнения обязательного поля template
в FBInstant.updateAsync
. Например, в игре "Крестики-нолики" этот вызов используется, чтобы сообщить сопернику, что сейчас его очередь ходить.
// This will post a custom update. If the game is played in a messenger // chat thread, this will post a message into the thread with the specified // image and text message. And when people launch the game from this // message, those game sessions will be able to access the specified blob // of data through FBInstant.getEntryPointData(). FBInstant.updateAsync({ action: 'CUSTOM', cta: 'Play', image: base64Picture, text: { default: 'Edgar played their move', localizations: { en_US: 'Edgar played their move', es_LA: '\u00A1Edgar jug\u00F3 su jugada!' } } template: 'play_turn', data: { myReplayData: '...' }, strategy: 'IMMEDIATE', notification: 'NO_PUSH' }).then(function() { // Closes the game after the update is posted. FBInstant.quit(); });
Вот как выглядит сообщение:
Дополнительную информацию об индивидуально настроенных обновлениях контекста см. в справке по SDK Моментальных игр.
Ознакомьтесь с нашими рекомендациями по отправке сообщений и уведомлений игрокам.
Обратите внимание, что обновления контекста можно отправлять только в Messenger. Для индивидуальной настройки интерфейса можно использовать метод context.getType()
и обнаруживать объекты THREAD
. Для переключения на более подходящий контекст используйте context.switchAsync
, context.chooseAsync
или context.createAsync
.
Игровой бот — эффективный инструмент, помогающий повторно вовлечь людей в игру. Создать его можно с помощью нашего руководства.
Вы научились создавать и настраивать Моментальную игру и игрового бота. А теперь изучите следующие материалы: