Gamecenter

Материал из wiki.appsalutecreator.com
Версия от 14:34, 9 февраля 2016; Sadovoy (обсуждение | вклад) (Параметры и модификаторы)
Перейти к: навигация, поиск

Объект Gamecenter используется для отправки данных на gamecenter. Отправлять можно набранные очки (score) или достижения (achievement).

Параметры и модификаторы

Gc1.jpg
  • положение - определяет положение объекта на сцене.
  • размер - определяет размер объекта на сцене.
  • achievement - достижение, которое будем отправлять.
  • achievement percent - на сколько процентов завершено достижение.
  • score - очки, которые мы будем отправлять.
  • score category - категория, в которую мы отправляем очки (ссылка на leaderboard).
  • cloud major field - поле в опциях, по которому будет выбираться версия сохранения из cloud при конфликте (наибольшее из значений будет приоритетнее)
  • локальная таблица - ссылка на таблицу в которую мы хотим загрузить локальные достижения.
  • локальный темплейт - ссылка на объект типа achievementitem (шаблон локального достижения).
  • состояние - состояние, которое мы передаем объекту gamecenter
authenticate - состояние, по которому начинается авторизация мобильного 
устройства на геймцентре.
score - состояние, по которому отправляются очки.
achievement - состояние, по которому отправляются достижения.
score_show - состояние, по которому можно посмотреть очки на геймцентре.
achievements_show - состояние, по которому можно посмотреть достижения.
cloud_check - состояние, по которому проверяется, есть ли сохранение в клауде.
cloud_apply - состояние, по которому применяется новое сохранение из клауда (reload).
cloud_cancel - состояние, по которому автоматическая отправка/получение сохранений будет отключена,
пока не будет вызвано состояние cloud_check
cloud_delete - состояние, по которому сохранение в клауде удаляется.
local - состояние, по которому в локальную таблицу подтянутся локальные темплейты (шаблоны достижений)
next_achievement - состояние, для обработки очереди полученных аччивок, при передаче состояния, объект уменьшает значение achievement_num на единицу и заполняет поля achievement_ico и achievement_txt. Нужно передавать, после того как показали текущую аччивку.
achievement_position - состояние, для получения порядкового номера аччивки в таблице локальных аччивок. Перед передачей, заполняем в поле param txtID локальной аччивки и забираем порядковый номер из поля result ( нумерация начин. с нуля).

Пример применения

На геймцентр можно отправлять очки и достижения. Для того, чтобы к объекту gamecenter был доступ, его лучше размещать на глобальном экране. Рассмотрим на примере отправку очков и достижений.

Очки и Достижения

Для того, чтобы объект gamecenter мог обмениваться данными с геймцентром, он должен сначала авторизироваться. Проводить авторизацию нужно на экране, предшествующему экрану, где нужно отправлять очки. Для этого можно сделать отдельную машину.

Gc2.jpg

Все очки, лидер бордеры, ачивки прописываются в обеъкте Gamecenter, каждая ачивка или score добавляется дополнительным параметром.

Gc1 new.jpg

Для каждой ачивки или score нужно прописать ее внутренний id и заполнить поля - внешние ссылки для различных платформ iOS, Amazon и т.д. Таким образом у нас заранее прописаны все ачивки и очки, и для их отправки мы выбираем их по внутреннему id.

Gc2 new.jpg

Далее когда у нам нужно отправить какое то достижение мы объекту в параметре achievement передаем внутренний id ачивки которую нужно отправить и передаем состояние achievement. См. скрин ниже.
Для того чтоб авивка выполнялась не полностью, а выполнился ее определенный процент, то есть если мы хотим получить ачивку в несколько этапов, перед отправкой мы должны указать процент отправки. По умолчанию стоит 100%.

Gc3 new.jpg

Чтобы посмотреть очки мы передаем объекту gamecenter состояние score_show. Для просмотра достижений нужно передать объекту gamecenter состояние achievements_show.

Отличительной особенностью достижений является то, что при успешной авторизации в опции записывается параметр, отвечающий за то или иное достижение. Поэтому эту информацию всегда можно считать из опций и использовать в игре. Выглядит она в опциях как параметр Gc5.jpg, значение которого = 1.

Сохранение в Cloud

Для того что бы заработала синхронизация с облаком, нужна авторизация. Все процессы происходят в фоне, за исключением момента после первой успешной авторизации. В этом случае, если в облаке есть какие либо данные, то пользователю должно быть предложено применить или отменить новое сохранение. ... P.S. В данный момент работает только в Google Play Games, т.е. если параметр android google = 1.

Дополнительные параметры

+.png авторизация: изменить состояние объекта - При авторизации пользователя перевести объект в новое состояние.

  • объект - объект - состояние которого меняем.
  • состояние - овое состояние для объекта из предыдущего поля.

+.png ошибка автор: изменить состояние объекта - При ошибке авторизации пользователя перевести объект в новое состояние.

  • объект - объект - состояние которого меняем.
  • состояние - овое состояние для объекта из предыдущего поля.

+.png Leaderboard - категория - Дополнительный параметр для отправки Score

  • id достиженя
  • IOS id достиженя
  • Amazon id достиженя
  • IGoogle id достиженя

+.png Achievement - достижение - Дополнительный параметр для отправки Achievement

  • id достиженя
  • IOS id достиженя
  • Amazon id достиженя
  • IGoogle id достиженя
  • локальный текст - текст который поместится в локальный шаблон аччивок ( поле word - текст аччивки; icon1 - картинка в темплейт);
  • не отображать в маркетах - указываем тексты из текстовой базы с названиями платформ ( поле word="webok"; google, webfb...);

Примечания и дополнения

Для того, чтобы понимать что происходит с объектом gamecenter по логу viewer, приведен ряд значений, которые может получать GGamecenter (state=n, где n - номер состояния):

n     состояние                          пояснение
0    ST_IDLE=0,                         // состояние простоя
1    ST_NOT_SUPPORTED,                  // геймцентр не поддерживается на устройстве
2    ST_AUTHENTICATE,                   // попытаться авторизоваться
3    ST_AUTHENTICATION_OK,              // авторизация прошла успешно
4    ST_AUTHENTICATION_ERROR,           // ошибка авторизации
5    ST_AUTHENTICATED,                  // успешно авторизовались
6    ST_REPORT_ACHIEVEMENT,             // запостить ачивку
7    ST_ACHIEVEMENT_SUCCESS,            // ачивка успешно отправлена
8    ST_ACHIEVEMENT_FAILED,             // не удалось отправить ачивку
9    ST_SHOW_ACHIEVEMENTS,              // показать стандартный гуи с ачивками
10   ST_REPORT_SCORE,                   // отправить очки
11   ST_SCORE_SUCCESS,                  // очки успешно отправлены
12   ST_SCORE_FAILED,                   // не удалось отправить очки
13   ST_SHOW_LEADERBOARDS,              // показать стандартный гуи с очками
14   ST_CLOUD_APPLY,                    // применить новые опции из клауда
15   ST_CLOUD_CANCEL,                   // отказаться от новых опций
16   ST_CLOUD_CHECK,                    // проверить сохраненные опции в клауде
17   ST_CLOUD_DELETE,                   // удалить опции из клауда

Например, GGameCenter::state old_state = 1, state = 5,
где:
old_state - предыдущее состояние,
state - текущее состояние.

Проверка получения achievement

Есть возможность проверять из редактора (на компьютере) приходят ли achievements - для этого в файлике Viewer_Log нужно найти строчку:

GGameCenter::reportAchievement achievement = %s, percent = %d


где,
%s - имя ачивмента (ссылочка которую дают маркетологи)
%d - число процента

Отключение неиспользуемого функционала

Если в проекте не используются лидерборды, ачивки, синхронизацию между устройствами, то их можно принудительно отключить вписав в app.icf или platform.icf следующие строки:


[GameCenter]
Achievements=1 
Leaderboards=1
Whispersync=0

1 - используется, 0 - не используется

по умолчанию:

Achievements=1
Leaderboards=1
Whispersync=0


Whispersync

Особенности Cloud save

  1. У объекта типа геймцентр параметр "память" должен быть равен 1(еденице)
  2. минимальное значение ключевого параметра должно быть и быть больше 0(например 1)
  3. В облако отправляется файл опций при переходе между экранами, но не раньше чем через 2 минуты. То есть пользователь в облаке имеет файл опций 2-3х-минутной давности.
  4. в AndroidManifest.xml(android-extra-application-manifest.xml) долны быть следующие строки:
<meta-data android:name="com.google.android.gms.games.APP_ID" android:value= "@string/app_id" />
<meta-data android:name="com.google.android.gms.appstate.APP_ID" android:value= "@string/app_id" />

и естественно должен быть указан id приложения для геймцентра


Настройки геймцентра для Google

в файле ids.xml долен быть указан id приложения

<?xml version="1.0" encoding="utf-8"?>

<resources>
    <string name="app_id">id_приложения_google_для_геймцентра</string>
    <string name="facebook_app_id">id_приложения_для_facebook(для работы только геймцентра указывать необязательно, но строка должна присутствовать)</string>
</resources>

Пример использования Cloud save

На одном экране пусть будет объект типа "геймцентр", объект типа "options", обработчики сообщений, кнопки авторизации, перехода на другой экран, проверки новых данных, применения пришедших изменений.

На другом - счётчик, который будет записывать значение в ключевое поле. На экране с счётчиком кнопка, которая увеличивает его значение, и кнопка возврата на основной экран.

Отправка происходит следующим образом:

  1. авторизуемся
  2. появилось сообщение о том что новых данных нет
  3. переходим на 2-й экран
  4. увеличиваем счётчик до выбранного значения
  5. ждём 2 минуты
  6. переходим на главный экран
  7. немного ждём
  8. закрываем приложение
  9. в управлении приложениями удаляем данные приложения (или просто удаляем приложение и устанавливаем снова)
  10. запускаем приложение
  11. авторизуемся
  12. появилось сообщение о том что есть новые данные
  13. применяем пришедшие изменения
  14. убеждаемся что счётчик показывает правильное значение

Отправка данных в облако происходит после перехода между экранами, но не ранее чем через две минуты после изменений. То есть в облако отправятся, в лучшем случае, настройки 2-х минутной давности.

Проверка новых данных в облаке происходит автоматически сразу после авторизации в объекте типа геймцентр, или при вызове соответствующего состояния.

Пример проекта с cloud save


Получение аччивки

Когда мы получаем аччивку (100% прогресс), то в объект gamecentre записываются след. параметры (чтобы моментально открыть окошко, вешаем на все аччивменты дёргание одной машинки):

achievement_num - количество аччивок в очереди.
achievement_txt - локальный текст последней в очереди аччивки;
achievement_ico - иконка последней аччивки.

Имея данные параметры мы заполняем поздравительное окошко с получением аччивки, после показа аччивки , передаём объекту gamecentre сост. next_achievement , чтобы объект обновил параметры ( если в очереди две аччивки, то объект перезаполнит поля achievement_txt и achievement_ico).

Achieve obtain wnd.jpg Achieve obtain wnd 2.jpg