Отображение игровых элементов пользовательского интерфейса центра

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

В iOS полноэкранный пользовательский интерфейс упаковывается как контроллер представления и следует стандартным соглашениям контроллеров представления в системе. Когда контроллер представления будет отклонен, один из контроллеров представления Вашей игры, как ожидают, представит эти контроллеры представления при необходимости, и позже ответит. На OS X специальный класс, предоставленный Гэймом Китом, обеспечивает подобную инфраструктуру так, чтобы Ваша игра могла представить пользовательский интерфейс. Другие главы в этом документе показывают код iOS для представления контроллера представления; эта глава показывает Вам, как использовать GKDialogController класс для представления одного из них просматривает контроллер на OS X.

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

Игровой центр UI выведен на экран Вашим контроллером представления (iOS)

Соглашение, используемое Гэймом Китом, для одного из Ваших контроллеров представления для представления контроллера представления Game Kit. Ваши действия контроллера представления как делегат в контроллере представления, который это представляет так, чтобы контроллеру представления можно было сообщить, когда проигрыватель закончен, смотря на представленный экран.

Перечисление 2-1 показывает больше всего общее использование этого образца, который должен показать Игровой пользовательский интерфейс Центра. Контроллер представления Game Center выводит на экран много различных частей Игрового содержания Центра, таким образом, большинство игр должно предложить кнопку, приносящую проигрыватель к этому экрану, даже если игра также показывает Игровое содержание Центра с помощью настроенного пользовательского интерфейса.

Перечисление 2-1  , Выводящее на экран Игровой пользовательский интерфейс Центра

- (void) showGameCenter
{
    GKGameCenterViewController *gameCenterController = [[GKGameCenterViewController alloc] init];
    if (gameCenterController != nil)
    {
       gameCenterController.gameCenterDelegate = self;
       [self presentViewController: gameCenterController animated: YES completion:nil];
    }
}

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

Перечисление 2-2  , Отвечающее, когда проигрыватель заканчивает просматривать Игровое содержание Центра

- (void)gameCenterViewControllerDidFinish:(GKGameCenterViewController *)gameCenterViewController
{
    [self dismissViewControllerAnimated:YES completion:nil];
}

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

Игровой центр UI выведен на экран Вашим окном (OS X)

В OS X контроллеры представления не играют ту же роль, как они делают в iOS. Во многих случаях, некоторый другой объект, ответственный за Ваши экраны интерфейса пользователя Игровое управление Центра. Это делает это с помощью GKDialogController класс. Этот класс представляет пользовательский интерфейс в окне, предоставленном Вашей игрой.

Перечисление 2-3 показывает, как код в Перечислении 2-1 изменяется для отображения в OS X. Этот код загружает одноэлементный диалоговый контроллер и указывает на диалоговый контроллер на окно игры. Тогда это представляет контроллер представления. Контроллер представления инстанцируют и конфигурируют точно, как это было на iOS.

Перечисление 2-3  , Выводящее на экран Игровой пользовательский интерфейс Центра в OS X

- (void) showGameCenter
{
    GKGameCenterViewController *gameCenterController = [[GKGameCenterViewController alloc] init];
    if (gameCenterController != nil)
    {
       GKDialogController *sdc = [GKDialogController sharedDialogController];
       sdc.parentWindow = myWindow;
       [sdc presentViewController: gameCenterController];
    }
}

Перечисление 2-4 показывает, как изменяется делегат.

Перечисление 2-4  , Отвечающее, когда проигрыватель отклоняет Игровое содержание Центра

- (void)gameCenterViewControllerDidFinish:(GKGameCenterViewController *)gameCenterViewController
{
    GKDialogController *sdc = [GKDialogController sharedDialogController];
    [sdc dismiss: self];
}

Отображение баннеров уведомления

Перечисление 2-5 показывает, как вывести на экран баннер уведомления в Вашей игре. Это создает заголовок и сообщение с помощью закрытых методов и затем выводит на экран баннер. Когда баннер исчезает из экрана, блок завершения вызывают и усовершенствования кода к некоторой другой части пользовательского интерфейса игры.

Перечисление 2-5  , Выводящее на экран баннер уведомления

- (void) showBanner
{
    NSString* title = [self generateTitle];
    NSString* message = [self generateBannerMessage];
    [GKNotificationBanner showBannerWithTitle: title message: message
        completionHandler:^{
        [self advanceToNextInterfaceScreen]
     }];
}