Достижения

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

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

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

Контрольный список для поддержки достижений

Для добавления достижений к игре необходимо взять следующие шаги:

  1. Перед добавлением достижений добавьте код для аутентификации местного игрока. Посмотрите Работу с Проигрывателями в Игровом Центре.

  2. Разработайте достижения своей игры. Посмотрите Разработку Достижения.

  3. Перейдите к Подключению iTunes и сконфигурируйте достижения для своей игры. Вы обеспечиваете, все данные должны были вывести на экран достижения к проигрывателю. Посмотрите Достижения Конфигурирования в Подключении iTunes.

  4. Добавьте код, чтобы сообщить о прогрессе местного игрока Игровому Центру. Путем хранения прогресса на Игровом Центре Вы также делаете успехи проигрывателя, видимые в Игровом приложении Центра. Посмотрите Прогресс Достижения Создания отчетов к Игровому Центру.

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

  6. Добавьте код для отображения прогресса проигрывателя к достижениям. Посмотрите Отображение Стандартного Пользовательского интерфейса Достижения, чтобы видеть, как Ваша игра может вывести на экран стандартный экран достижений.

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

Разработка достижения

Проект достижения запускается с простого оператора цели достижения. Вот некоторые цели в качестве примера, которые могут определить игру:

Целевой оператор описывает условие инициирования (“Зарабатывают первое место на различной трассе”), и количество (5). Условие инициирования важно, поскольку оно определяет что-то, что Ваша игровая логика должна отследить. В мчащемся примере Ваша игра должна проверить условия победы в конце каждой гонки, но это также должно записать, какие дорожки проигрыватель победил.

Количество обычно определяет, насколько гранулированный задача для проигрывателя. С некоторыми достижениями количество не важно; достижение или заработано или нет. Например, “Победите босс энд-шпиля”, не цель, что проигрыватель обычно зарабатывает частичный кредит к завершению. Напротив, целью “Получения 10 пиратов” является более гранулированная задача. Ваша игра должна отследить число полученных пиратов и использовать это количество, чтобы сообщить о прогрессе Игровому Центру.

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

У Вас есть много комнаты, чтобы быть творческими с видами достижений, которые Вы создаете. Вот некоторые общие стратегии разработки достижений, которые могут вести Вас посредством процесса.

Создайте достижения, показывающие, что проигрыватели разных вещей могут сделать в Вашей игре

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

Создайте достижения, требующие разных уровней навыка или посвящения

Обеспечьте достижения и для новых проигрывателей и для опытных игроков — и промежуточных проигрывателей. Достижениями является вознаграждение к проигрывателю для того, чтобы играть в Вашу игру. Если все достижения Вашей игры будут слишком просты для избиения, то вознаграждения будут казаться дешевыми, и проигрыватель не будет чувствовать себя оспариваемым. С другой стороны, если все достижения являются слишком трудными для приобретения, то проигрыватели не могут быть вознаграждены достаточно часто, чтобы продолжать играть игру. Стремитесь включать достижения, которые могут быть заработаны при изучении, как играть в игру и также достижения, что премиальные проигрыватели для изучения, как играть игру хорошо.

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

Создайте достижения для различного настоящего разделов или режимов в Вашей игре

По различным причинам Вы могли бы принять решение разделить геймплей в меньшие игры или игровые режимы. Некоторые причины включают:

  • Отличные наборы игровых правил или вариантов правила (получают флаг, продление действия),

  • Отличные игровые уровни или карты

  • Игра с базовой историей распалась на отличные действия или дуги истории

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

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

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

  • Неожиданный элемент в графике или истории.

  • Проигрыватель успешно выполняется в сумасшедшем трюке.

  • Можно зеркально отразить соглашение от достижения, являющегося чем-то, что проигрыватель очень старается заработать во что-то более позорное, заработанное, когда они перестали работать эффектно. Достижение тогда представляет способ ввести юмор в ситуацию. Например, достижение под названием Горячая Нога, которая могла бы появиться после проигрывателя, попало в лаву 20 раз.

Сохраните часть своего бюджета для более поздних версий Вашей игры

Существуют пределы тому, сколько достижений можно создать в игре и сколько точек можно вознаградить проигрывателю:

  • Каждая игра может иметь до 100 достижений.

  • Каждая игра может присудить до 1 000 очков.

  • Никакое отдельное достижение не может присудить больше чем 100 очков.

Избегите тратить весь свой бюджет на начальной версии Вашей игры. Сохраните часть своего бюджета для поддержки обновлений и нового содержания.

Конфигурирование Достижений в Подключении iTunes

Когда Вы готовы добавить достижения, Вы определяете их сначала в Подключении iTunes. Для каждого достижения Вы обеспечиваете значения для всех свойств, перечисленных в Таблице 5-1. Далее, для каждого языка Вы планируете локализовать достижение в, Вы предоставляете данные для всех свойств, перечисленных в Таблице 5-2.

  Свойства Table 5-1 Achievement

Свойство

Описание

Ссылочное имя достижения

Внутреннее имя, что необходимо предусмотреть каждое достижение, используемое только в Подключении iTunes. Это - имя, которое Вы будете использовать при поиске достижения в Подключении iTunes.

Достижение ID

Выбранный алфавитно-цифровой идентификатор для Вашего достижения. Этот ID ограничивается 100 символами. Ваш ID достижения является постоянной установкой и поэтому не может быть отредактировано позднее. Достижение ID используется в Вашей игре для обращения к этому достижению.

Значение точки

Точки, что Ваше достижение стоит.

Скрытый

Достижения, отмеченные, как Скрытый, остаются скрытыми к проигрывателю на Игровом Центре до окончания первого раза, когда Вы сообщаете о прогрессе для того достижения.

Достижимый несколько раз

Указывает, может ли пользователь заработать достижение многократно.

Табличные 5-2  свойства языка Достижения

Свойство

Описание

Язык

Язык, на котором Вы хотели бы, чтобы появилось это достижение.

Заголовок

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

Предварительно заработанное описание

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

Заработанное описание

Описание Вашего достижения, как это появляется к Игровому проигрывателю Центра после того, как он или она заработает его.

Изображение

Локализованное изображение, представляющее достижение. Изображение должно быть a .jpeg, .jpg, .tif, .tiff, или .png файл, который является 512 x 512 или 1024 x 1 024 пикселя, по крайней мере 72 точки на дюйм, и в цветовом пространстве RGB. Это свойство требуется.

Для получения дополнительной информации об установке Ваших списков лидеров в Подключении iTunes посмотрите Достижения в Игровом Руководстве по конфигурированию Центра для Подключения iTunes.

Добавление поддержки достижения игре

Когда Вы готовы реализовать достижения в своей игре, Вы делаете настолько использующий классы, перечисленные в Таблице 5-3.

Табличные 5-3  Классы в Гэйме Ките раньше реализовывали поддержку достижения

Имя класса

Описание

GKAchievement

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

GKAchievementDescription

Содержит локализованный текст и изображения для достижения. Данные для описаний достижения получены от Игрового Центра во время выполнения и основываются на данных, которые Вы предоставили Подключению iTunes при создании достижения там.

GKGameCenterViewController

Обеспечивает стандартный пользовательский интерфейс для отображения Игрового содержания Центра к проигрывателю. Это содержание включает страницу достижений.

GKAchievementViewController

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

Создание отчетов о прогрессе достижения к игровому центру

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

  • Игровое приложение Центра может вывести на экран прогресс проигрывателя к достижению.

  • Если проигрыватель имеет многократные устройства, Ваша игра на другом устройстве может получить прогресс проигрывателя к достижениям.

Ваша игра сообщает о прогрессе проигрывателя при помощи процента с плавающей точкой, от 0.0 к 100.0, это представляет, сколько из достижения завершил проигрыватель. Вы решаете, как тот процент вычисляется и когда он изменяется. Например, если бы проигрыватель зарабатывает достижение просто для обнаружения расположения в Вашей игре, то Вы просто сообщили бы о достижении, поскольку 100 процентов завершаются в первый раз, когда Вы сообщаете о прогрессе Игровому Центру. С другой стороны, для достижения как “Получение 10 пиратов”, Ваши инкременты механизма создания отчетов к 10 процентам каждый раз проигрыватель получают пирата.

Когда Вы сообщаете о прогрессе Игровому Центру, две вещи происходят:

  • Если достижение было ранее скрыто, оно показано к проигрывателю. Достижение показано, даже если Ваш проигрыватель не сделал фактических успехов на достижении (процент 0.0).

  • Если значение, о котором сообщают, выше, чем предыдущее значение сообщило для достижения, значение на Игровом Центре обновляется к новому значению. Проигрыватели никогда не теряют прогресс на достижениях.

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

Перечисление 5-1 показывает, как сообщить о прогрессе Игровому Центру. Во-первых, новый объект достижения инициализируется с помощью строки идентификатора для достижения. Затем, объект percentComplete свойство установлено отразить прогресс проигрывателя. Наконец, объект reportAchievementWithCompletionHandler: метод вызывают, передающий в блоке, который будет уведомлен, когда отправляется отчет.

Перечисление 5-1  Сообщая о прогрессе относительно достижения

- (void) reportAchievementIdentifier: (NSString*) identifier percentComplete: (float) percent
{
    GKAchievement *achievement = [[GKAchievement alloc] initWithIdentifier: identifier];
    if (achievement)
    {
         achievement.percentComplete = percent;
         [achievement reportAchievementWithCompletionHandler:^(NSError *error)
             {
                  if (error != nil)
                  {
                      NSLog(@"Error in reporting achievements: %@", error);
                  }
             }];
    }
}

В iOS 7 можно сообщить о достижениях для других проигрывателей при заканчивании основанного на повороте матча. Только текущий проигрыватель в состоянии сообщить о достижениях.

Перечисление 5-2  Сообщая о прогрессе относительно достижения для другого проигрывателя

- (void) reportAchievementIdentifier: (NSString*) identifier forPlayer: (NSString *) playerID percentComplete: (float) percent
{
    GKAchievement *achievement = [[GKAchievement alloc] initWithIdentifier:identifier forPlayer:playerID];
    if (achievement)
    {
         achievement.percentComplete = percent;
         [achievement reportAchievementWithCompletionHandler:^(NSError *error)
             {
                  if (error != nil)
                  {
                      NSLog(@"Error in reporting achievements: %@", error);
                  }
             }];
    }
}

Для создания отчетов о прогрессе относительно многократных достижений сразу используйте reportAchievements:withCompletionHandler: метод класса вместо этого. Перечисление 5-3 показывает возможную реализацию. Этот пример создает три объекта достижения, представляющие три достижения, которые только что завершил проигрыватель. Это тогда связывает объекты достижения в массив и сообщает о них всех с вызовом к методу класса.

Перечисление 5-3  Сообщая о прогрессе относительно многократных достижений

- (void) completeMultipleAchievements
{
    GKAchievement *achievement1 = [[GKAchievement alloc] initWithIdentifier: @"DefeatedFinalBoss"];
    GKAchievement *achievement2 = [[GKAchievement alloc] initWithIdentifier: @"FinishedTheGame"];
    GKAchievement *achievement3 = [[GKAchievement alloc] initWithIdentifier: @"PlayerIsAwesome"];
    achievement1.percentComplete = 100.0;
    achievement2.percentComplete = 100.0;
    achievement3.percentComplete = 100.0;
 
    NSArray *achievementsToComplete = [NSArray arrayWithObjects:achievement1,achievement2,achievement3, nil];
    [GKAchievement reportAchievements: achievementsToComplete withCompletionHandler:^(NSError *error)
             {
                  if (error != nil)
                  {
                      NSLog(@"Error in reporting achievements: %@", error);
                  }
             }];
    }
}

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

Загрузка прогресса достижения

Вы загружаете текущую информацию о прогрессе местного игрока из Игрового Центра путем вызова loadAchievementsWithCompletionHandler: метод. Если работа завершается успешно, она возвращает массив GKAchievement объекты, один объект для каждого достижения Ваша игра ранее сообщила о прогрессе для.

Перечисление 5-4 показывает, как Ваша игра могла бы реализовать это.

Перечисление 5-4  , Загружающее прогресс достижения

- (void) loadAchievements
{    [GKAchievement loadAchievementsWithCompletionHandler:^(NSArray *achievements, NSError *error) {
        if (error != nil)
        {
            // Handle the error.
        }
        if (achievements != nil)
        {
            // Process the array of achievements.
        }
       }];
}

Логическое время для загрузки прогресса местного игрока сразу после того, как проигрыватель аутентифицируется.

В то время как проигрыватель развивается через Вашу игру, Вы хотите обновить их прогресс на Игровом Центре. Если Ваша игра ранее сообщила о прогрессе к этому достижению, Ваша игра должна сначала загрузить прогресс проигрывателя из Игрового Центра так, чтобы Вы знали то, что развивается, проигрыватель уже сделал. Если проигрыватель сделал успехи на достижении, что проигрыватель никогда не делал успехи на прежде, Ваша игра должна создать новый объект достижения. Простой способ управлять этими объектами достижения в Вашей игре при помощи непостоянного словаря, с помощью identifier свойство как ключ словаря и достижение возражает как содержание для того ключа. Вот то, как изменить Перечисление 5-1 и Перечисление 5-4 для использования словаря:

  1. Добавьте непостоянное свойство словаря к своему классу, сообщающему о достижениях; этот словарь хранит набор объектов достижения.

    @property(nonatomic, retain) NSMutableDictionary *achievementsDictionary;
  2. Инициализируйте словарь достижений.

    achievementsDictionary = [[NSMutableDictionary alloc] init];
  3. Когда Ваши игровые данные достижения загрузок, добавляют, что достижение возражает против словаря.

    - (void) loadAchievements
    {
        [GKAchievement loadAchievementsWithCompletionHandler:^(NSArray *achievements, NSError *error)
            {
                if (error == nil)
                {
                    for (GKAchievement* achievement in achievements)
                        [achievementsDictionary setObject: achievement forKey: achievement.identifier];
                }
            }];
    }
  4. Реализуйте метод, тестирующий словарь на определенный идентификатор достижения. Если идентификатор не существует как ключ в словаре, создает новое достижение, возражают и добавляют его к словарю.

    - (GKAchievement*) getAchievementForIdentifier: (NSString*) identifier
    {
        GKAchievement *achievement = [achievementsDictionary objectForKey:identifier];
        if (achievement == nil)
        {
            achievement = [[GKAchievement alloc] initWithIdentifier:identifier];
            [achievementsDictionary setObject:achievement forKey:achievement.identifier];
        }
        return achievement;
    }
  5. Измените код в Перечислении 5-1 для вызова getAchievementForIdentifier: получать объект достижения.

    - (void) reportAchievementIdentifier: (NSString*) identifier percentComplete: (float) percent
    {
        GKAchievement *achievement = [self getAchievementForIdentifier:identifier];
        if (achievement)
        {
             achievement.percentComplete = percent;
             [achievement reportAchievementWithCompletionHandler:^(NSError *error)
                 {
                      if (error != nil)
                      {
                          // Log the error.
                      }
                 }];
        }
    }

Методы наиболее успешной практики для создания отчетов о прогрессе достижения

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

  • Прогресс отчета на достижении, как только проигрыватель делает успехи. Не задерживайте создание отчетов до более позднего времени; если проигрыватель зарабатывает достижение, баннер должен быть сразу выведен на экран.

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

  • Если проигрыватель делает успехи на многократных достижениях одновременно, используйте метод, который, как показывают в Перечислении 5-3, сообщил о прогрессе. Используя этот метод класса более эффективно.

  • Если Ваша игра выводит на экран пользовательский баннер или индикатор, когда проигрыватель зарабатывает достижение, установите showsCompletionBanner свойство к NO прежде, чем сообщить о достижении Игровому Центру.

Сброс прогресса достижения

Можно хотеть позволить проигрывателю сбрасывать их прогресс на достижениях в игре. Перечисление 5-5 демонстрирует, как сделать это. Во-первых, этот метод очищает любые локально кэшируемые объекты достижения, создаваемые предыдущим примером. Затем это вызывает Гэйма Кита для сброса прогресса проигрывателя, сохраненного на Центре Гэйма.

Перечисление 5-5  , Сбрасывающее прогресс достижения

- (void) resetAchievements
{
// Clear all locally saved achievement objects.
    achievementsDictionary = [[NSMutableDictionary alloc] init];
// Clear all progress saved on Game Center.
[GKAchievement resetAchievementsWithCompletionHandler:^(NSError *error)
    {
        if (error != nil)
            // handle the error.
    }];
}

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

Отображение стандартного пользовательского интерфейса достижения

В дополнение к передающему прогрессу достижения к Игровому Центру необходимо также позволить проигрывателям просматривать свой прогресс из игры. Самый простой способ сделать это с a GKGameCenterViewController объект. Можно скорректировать поведение контроллера представления Game Center так, чтобы оно показало страницу достижений, когда представлено. Перечисление 5-6 показывает, как выполнить это. Это инстанцирует нового контроллера представления и устанавливает gameCenterDelegate свойство для указания на представление просматривает контроллер. Это тогда конфигурирует состояние отображения контроллера для показа страницы достижений. Наконец, это представляет список лидеров и ожидает делегата, чтобы быть вызванным. На OS X Вы используете GKDialogController вывести на экран контроллер представления, как описано в Отображении Игровых Элементов пользовательского интерфейса Центра.

Перечисление 5-6  , Выводящее на экран страницу достижения Игрового пользовательского интерфейса Центра.

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

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

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

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

Создание пользовательского пользовательского интерфейса достижения

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

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

Перечисление 5-8 показывает, как загрузить описания достижения с помощью loadAchievementDescriptionsWithCompletionHandler: метод.

Перечисление 5-8  , Получающее метаданные достижения от Игрового Центра

- (void) retrieveAchievmentMetadata
{
    [GKAchievementDescription loadAchievementDescriptionsWithCompletionHandler:
        ^(NSArray *descriptions, NSError *error) {
            if (error != nil)
            {
                // Process the error.
            }
            if (descriptions != nil)
            {
                // use the achievement descriptions.
            }
        }];
}

Несмотря на то, что свойства очевидны, одно критическое свойство, которое стоит отметить, identifier свойство. Это соответствует идентификатору достижения, используемому в Подключении iTunes и на a GKAchievement объект. При разработке настроенного пользовательского интерфейса Вы используете identifier свойство, чтобы соответствовать каждому GKAchievementDescription возразите против соответствия GKAchievement возразите, что записывает прогресс проигрывателя на том достижении.

Значение image свойство nil пока Вы не говорите объекту загрузить его данные изображения. Перечисление 5-9 показывает, как Ваша игра говорит описанию достижения загружать изображение.

Перечисление 5-9  , Загружающее завершенное изображение достижения

[achievementDescription loadImageWithCompletionHandler:^(UIImage *image, NSError *error) {
    if (error == nil)
    {
        // Use the loaded image. The image property also holds the same image.
    }
  }];

GKAchievementDescription класс также обеспечивает два изображения значения по умолчанию, которые может использовать Ваша игра. incompleteAchievementImage метод класса возвращает изображение, которое должно использоваться для любого незавершенного достижения. Если Ваша игра неспособна загрузить изображение для завершенного достижения (или Вы хотите вывести на экран изображение, в то время как пользовательское изображение загружается), placeholderCompletedAchievementImage метод класса обеспечивает универсальное изображение для завершенного достижения.