GKAchievement
Ваша игра использует a GKAchievement
объект связаться с Игровым Центром о прогрессе местного игрока к завершению достижения.
Достижениями является отличный способ предоставить Вашим проигрывателям обратную связь и удовлетворение. Однако Вы не можете только добавить достижение к своей игре программно. Существует несколько шагов, которые необходимо выполнить для добавления достижений к игре:
Перед добавлением достижений добавьте код для аутентификации местного игрока. Посмотрите Работу с Проигрывателями в Игровом Центре.
Разработайте достижения своей игры. Посмотрите Разработку Достижения.
Перейдите к Подключению iTunes и сконфигурируйте достижения для своей игры. Вы обеспечиваете, все данные должны были вывести на экран достижения к проигрывателю. Посмотрите Достижения Конфигурирования в Подключении iTunes.
Добавьте код, чтобы сообщить о прогрессе местного игрока Игровому Центру. Путем хранения прогресса на Игровом Центре Вы также делаете успехи проигрывателя, видимые в Игровом приложении Центра. Для создания отчетов о прогрессе местного игрока относительно достижения игра обновляет
percentComplete
свойство объекта достижения и вызовов объектreportAchievements:withCompletionHandler:
метод класса. Используйте этот метод при создании отчетов один или многократные достижения.Добавьте код для загрузки предыдущего прогресса местного игрока на достижениях от Игрового Центра. Для запроса прогресса местного игрока на достижениях вызовите
loadAchievementsWithCompletionHandler:
метод класса. Загрузите прогресс местного игрока вскоре после того, как будет успешно аутентифицироваться проигрыватель.
По умолчанию, когда достижение завершается, Гэйм Кит выводит на экран баннер уведомления к проигрывателю. Если Ваша игра хочет вывести на экран свой собственный пользовательский интерфейс достижения, можно препятствовать тому, чтобы баннер был выведен на экран путем установки showsCompletionBanner
свойство достижения возражает против NO
false
прежде, чем сообщить о прогрессе проигрывателя.
Для очистки всего прогресса, местный игрок сделал на достижениях, вызовите resetAchievementsWithCompletionHandler:
метод класса.
Соответствует
-
AnyObject
-
CVarArgType
-
Сопоставимый
-
Hashable
-
NSCoding
-
NSObjectProtocol
-
NSSecureCoding
-
Печатаемый
-
NSCoding
-
NSObject
-
NSSecureCoding
Оператор импорта
Swift
import GameKit
Objective C
@import GameKit;
Доступность
Доступный в OS X v10.8 и позже.
-
Загрузки ранее представили прогресс достижения для местного игрока из Игрового Центра.
Объявление
Swift
class func loadAchievementsWithCompletionHandler(_
completionHandler
: (([AnyObject]!, NSError!) -> Void)!)Параметры
completionHandler
Блок, который вызовут, когда завершается загрузка.
Блок получает следующие параметры:
achievements
Массив
GKAchievement
объекты, который представляет весь прогресс, сообщили Игровому Центру местного игрока. Если ошибка произошла, этот параметр может быть не -nil
, когда массив содержит любую информацию о достижении, Гэйм Кит смог выбрать.error
Если ошибка произошла, этот объект описывает ошибку. Если работа завершилась успешно, это значение
nil
.Обсуждение
Когда этот метод вызывают, он создает новую фоновую задачу для обрабатывания запроса. Метод тогда возвращает управление Вашей игре. Позже, когда задача завершена, Гэйм Кит вызывает Ваш обработчик завершения. Обработчик завершения всегда вызывают на основном потоке. Перечисление 1 показывает пример того, как загрузить достижения местного игрока.
- (void) loadAchievements
{ [GKAchievement loadAchievementsWithCompletionHandler:^(NSArray *achievements, NSError *error) {
if (error != nil)
{
NSLog(@"Error in loading achievements: %@", error);
}
if (achievements != nil)
{
// Process the array of achievements.
}
}];
}
Оператор импорта
Objective C
@import GameKit;
Swift
import GameKit
Доступность
Доступный в OS X v10.8 и позже.
-
Инициализирует новый объект достижения для местного игрока.
Объявление
Swift
init!(identifier
identifier
: String!)Objective C
- (instancetype)initWithIdentifier:(NSString *)
identifier
Параметры
identifier
Строка, соответствующая строку идентификатора для достижения, которое Вы создали для своей игры на Подключении iTunes.
Возвращаемое значение
Инициализированный объект достижения, или
nil
если произошла ошибка.Обсуждение
Ваша игра инициализирует новый объект достижения только, когда она ранее не сообщила о прогрессе для того достижения. Если Ваша игра ранее сообщила о прогрессе относительно достижения, необходимо сначала получить текущий прогресс путем вызова
loadAchievementsWithCompletionHandler:
метод класса.Оператор импорта
Objective C
@import GameKit;
Swift
import GameKit
Доступность
Доступный в OS X v10.8 и позже.
-
Инициализирует объект достижения для определенного проигрывателя.
Объявление
Параметры
identifier
Строка, соответствующая строку идентификатора для достижения, которое Вы создали для своей игры на Подключении iTunes.
player
A
GKPlayer
объект, идентифицирующий проигрыватель, связанный с указанным достижением.Возвращаемое значение
Инициализированный объект достижения связался с определенным
GKPlayer
объект, илиnil
если произошла ошибка.Обсуждение
Ваша игра инициализирует новый объект достижения для определенного проигрывателя только, когда она ранее не сообщила о прогрессе для того достижения. Только используйте этот метод для представления достижения участника при заканчивании основанного на повороте матча.
Оператор импорта
Objective C
@import GameKit;
Swift
import GameKit
Доступность
Доступный в OS X v10.10 и позже.
-
идентификатор идентификатор
СвойствоСтрока, используемая для однозначного определения определенного достижения объект, относится к.
Обсуждение
identifier
свойство должно соответствовать строку идентификатора для достижения, которое Вы создали для своей игры на Подключении iTunes.Оператор импорта
Objective C
@import GameKit;
Swift
import GameKit
Доступность
Доступный в OS X v10.8 и позже.
-
percentComplete percentComplete
СвойствоЗначение процента, утверждающее, как далеко проигрыватель развился на этом достижении.
Объявление
Swift
var percentComplete: Double
Objective C
@property(assign, atomic) double percentComplete
Обсуждение
Значение по умолчанию для недавно инициализированного объекта достижения
0.0
. Диапазон юридических значений между0.0
и100.0
, включительно. Вы решаете, как тот процент вычисляется и когда он изменяется. Например, если бы проигрыватель зарабатывает достижение просто для обнаружения расположения в Вашей игре, то Вы просто сообщили бы о достижении, поскольку 100 процентов завершаются в первый раз, когда Вы сообщаете о прогрессе Игровому Центру. С другой стороны, для достижения как “Получение 10 пиратов”, Ваши инкременты механизма создания отчетов к 10 процентам каждый раз проигрыватель получают пирата.Оператор импорта
Objective C
@import GameKit;
Swift
import GameKit
Доступность
Доступный в OS X v10.8 и позже.
-
завершенный завершенный
СвойствоБулево значение, утверждающее, завершил ли проигрыватель достижение. (только для чтения)
Объявление
Swift
var completed: Bool { get }
Objective C
@property(readonly, getter=isCompleted, atomic) BOOL completed
Обсуждение
Значение этого свойства
YES
true
еслиpercentComplete
свойство равно100.0
; иначе, этоNO
false
.Оператор импорта
Objective C
@import GameKit;
Swift
import GameKit
Доступность
Доступный в OS X v10.8 и позже.
-
lastReportedDate lastReportedDate
СвойствоО прошлом разе, которые развиваются на достижении, успешно сообщили Игровому Центру. (только для чтения)
Объявление
Swift
@NSCopying var lastReportedDate: NSDate! { get }
Objective C
@property(copy, readonly, atomic) NSDate *lastReportedDate
Обсуждение
На недавно инициализированном объекте достижения это свойство содержит текущую дату.
Оператор импорта
Objective C
@import GameKit;
Swift
import GameKit
Доступность
Доступный в OS X v10.8 и позже.
-
Отчеты развиваются на массиве достижений.
Объявление
Swift
class func reportAchievements(_
achievements
: [AnyObject]!, withCompletionHandlercompletionHandler
: ((NSError!) -> Void)!)Параметры
achievements
Массив
GKAchievement
объекты, который содержит достижения, прогресс которых обновляется.completionHandler
Блок, который вызовут после работы, завершается.
Блок берет следующий параметр:
error
Если работа была успешна, это значение
nil
; иначе, этот параметр содержит объект, описывающий произошедшую проблему.Обсуждение
Используйте этот метод класса каждый раз, когда необходимо представить одно или более обновлений достижения одновременно. Вызов этого метода сообщает о каждом из достижений в массиве. Обработка многократных достижений сразу позволяет всей работе быть обработанной более эффективно с помощью этого метода, как обработчик завершения только вызывают один раз.
Reporting progress on an achievement
показывает пример того, как сообщить о единственном достижении.- (void) reportAchievementIdentifier: (NSString*) identifier percentComplete: (float) percent
{
GKAchievement *achievement = [[GKAchievement alloc] initWithIdentifier: identifier];
if (achievement)
{
achievement.percentComplete = percent;
[GKAchievement reportAchievements:@[achievement] withCompletionHandler:^(NSError *error)
{
if (error != nil)
{
NSLog(@"Error in reporting achievements: %@", error);
}
}];
}
}
Перечисление 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 = @[achievement1,achievement2,achievement3];
[GKAchievement reportAchievements: achievementsToComplete withCompletionHandler:^(NSError *error)
{
if (error != nil)
{
NSLog(@"Error in reporting achievements: %@", error);
}
}];
}
}
Когда этот метод вызывают, он создает новую фоновую задачу для обрабатывания запроса. Метод тогда возвращает управление Вашей игре. Позже, когда задача завершена, Гэйм Кит вызывает Ваш обработчик завершения. Обработчик завершения всегда вызывают на основном потоке.
Оператор импорта
Objective C
@import GameKit;
Swift
import GameKit
Доступность
Доступный в OS X v10.8 и позже.
-
reportAchievements (_: withEligibleChallenges:withCompletionHandler:) + reportAchievements:withEligibleChallenges:withCompletionHandler:
Сообщает список достижений и ограничивает проблемы, которые могут завершить те достижения.
Объявление
Swift
class func reportAchievements(_
achievements
: [AnyObject]!, withEligibleChallengeschallenges
: [AnyObject]!, withCompletionHandlercompletionHandler
: ((NSError!) -> Void)!)Параметры
achievements
Массив
GKAchievement
объекты, который представляет все достижения, о которых сообщают.challenges
Массив
GKChallenge
объекты, который представляет ограниченные проблемы, связанные с достижениями, о которых сообщают. Если ошибка произошла, этот параметр может быть не -nil
, когда массив содержит любую информацию о проблеме, Гэйм Кит смог выбрать.completionHandler
Блок, который вызовут, когда завершается загрузка.
Блок получает следующий параметр:
error
Если ошибка произошла, этот объект описывает ошибку. Если работа завершилась успешно, это значение
nil
.Обсуждение
Когда этот метод вызывают, он создает новую фоновую задачу для обрабатывания запроса. Метод тогда возвращает управление Вашей игре. Позже, когда задача завершена, Гэйм Кит вызывает Ваш обработчик завершения. Обработчик завершения всегда вызывают на основном потоке.
Оператор импорта
Objective C
@import GameKit;
Swift
import GameKit
Доступность
Доступный в OS X v10.10 и позже.
-
Булево значение, утверждающее, выведен ли баннер на экран, когда завершается достижение.
Объявление
Swift
var showsCompletionBanner: Bool
Objective C
@property(assign, atomic) BOOL showsCompletionBanner
Обсуждение
Когда достижение завершается, и значение этого свойства
YES
true
, баннер уведомления выведен на экран к проигрывателю для информирования их о завершенном достижении. Если значение этого свойстваNO
false
, нет никакой визуальной индикации, что завершается достижение. Ваша игра должна установить это свойство вNO
false
обеспечить его собственный визуальный индикатор, что было заработано достижение. Значение по умолчаниюNO
false
.Оператор импорта
Objective C
@import GameKit;
Swift
import GameKit
Доступность
Доступный в OS X v10.8 и позже.
-
Сброс весь прогресс достижения для местного игрока.
Объявление
Swift
class func resetAchievementsWithCompletionHandler(_
completionHandler
: ((NSError!) -> Void)!)Objective C
+ (void)resetAchievementsWithCompletionHandler:(void (^)(NSError *error))
completionHandler
Параметры
completionHandler
Блок, который вызовут, когда завершается действие сброса.
Блок берет следующий параметр:
error
Если работа была успешна, это значение
nil
; иначе, этот параметр содержит объект, описывающий произошедшую проблему.Обсуждение
Вызов этого метода класса удаляет весь прогресс к достижениям, ранее сообщил для местного игрока. Скрытые достижения, которые были ранее видимы, теперь скрыты снова. Перечисление 4 показывает пример того, как сбросить достижения Вашей игры.
- (void) resetAchievements
{
[GKAchievement resetAchievementsWithCompletionHandler:^(NSError *error)
{
if (error != nil)
NSLog(@"Could not reset achievements due to %@", error);
}];
}
Когда этот метод вызывают, он создает новую фоновую задачу для обрабатывания запроса. Метод тогда возвращает управление Вашей игре. Позже, когда задача завершена, Гэйм Кит вызывает Ваш обработчик завершения. Обработчик завершения всегда вызывают на основном потоке.
Оператор импорта
Objective C
@import GameKit;
Swift
import GameKit
Доступность
Доступный в OS X v10.8 и позже.
-
challengeComposeControllerWithMessage (_: players:completionHandler:) - challengeComposeControllerWithMessage:players:completionHandler:
Обеспечивает проблема составляют контроллер представления с предварительно отформатированным сообщением для достижения и предварительно выобранных объектов GKPlayer.
Объявление
Swift
func challengeComposeControllerWithMessage(_
message
: String!, playersplayers
: [AnyObject]!, completionHandlercompletionHandler
: GKChallengeComposeCompletionBlock!) -> NSViewController!Objective C
- (NSViewController *)challengeComposeControllerWithMessage:(NSString *)
message
players:(NSArray *)players
completionHandler:(GKChallengeComposeCompletionBlock)completionHandler
Параметры
message
Сообщение, отправляющееся в другие проигрыватели. Это сообщение может быть отредактировано проигрывателем.
players
Массив
GKPlayer
объекты, который содержит идентификаторы проигрывателя, в которые состоит в том, чтобы быть отправлена проблема.completionHandler
Блок, который вызовут после контроллера представления, был выведен на экран. Содержит причину, обработчик вызвали и все идентификаторы проигрывателя, в которые была отправлена проблема.
Возвращаемое значение
A
UIViewController
представление, содержащее идентификаторы проигрывателя и сообщение проблемы.Обсуждение
Контроллер представления возвратился, представлен модально от контроллера вида сверху. После того, как контроллер представления выведен на экран, и проигрыватель отправляет или отменяет проблему, блок обработчика завершения вызывают.
Когда этот метод вызывают, он создает новую фоновую задачу для обрабатывания запроса. Метод тогда возвращает управление Вашей игре. Позже, когда задача завершена, Гэйм Кит вызывает Ваш обработчик завершения. Обработчик завершения всегда вызывают на основном потоке.
Оператор импорта
Objective C
@import GameKit;
Swift
import GameKit
Доступность
Доступный в OS X v10.10 и позже.
-
selectChallengeablePlayers (_: withCompletionHandler:) - selectChallengeablePlayers:withCompletionHandler:
Находит подмножество проигрывателей, которые могут заработать достижение.
Объявление
Swift
func selectChallengeablePlayers(_
players
: [AnyObject]!, withCompletionHandlercompletionHandler
: (([AnyObject]!, NSError!) -> Void)!)Параметры
players
Массив
GKPlayer
объекты, содержащие список проигрывателей. Список проигрывателей используется для нахождения тех проигрывателей, которые приемлемы зарабатывать достижение.completionHandler
Блок, который вызовут, когда завершается загрузка.
Блок получает следующие параметры:
challengeablePlayers
Массив
GKPlayer
объекты, представляющие проигрыватели в исходном массиве, которые в состоянии завершить проблему. Если ошибка произошла, этот параметр может быть не -nil
, когда массив содержит любую информацию о достижении, Гэйм Кит смог выбрать.error
Если ошибка произошла, этот объект описывает ошибку. Если работа завершилась успешно, это значение
nil
.Обсуждение
Когда этот метод вызывают, он создает новую фоновую задачу для обрабатывания запроса. Метод тогда возвращает управление Вашей игре. Позже, когда задача завершена, Гэйм Кит вызывает Ваш обработчик завершения. Обработчик завершения всегда вызывают на основном потоке. Перечисление 5 показывает, как счесть проигрыватели имеющими право быть оспариваемым завершить достижение.
- (void) challengePlayersToCompleteAchievement: (GKAchievement*) achievement
{
[achievement selectChallengeablePlayers:[GKLocalPlayer localPlayer].friends withCompletionHandler:^(NSArray *challengeablePlayers, NSError *error) {
if (challengeablePlayers)
{
//send a challenge to each of the eligible players.
}
}];
}
Оператор импорта
Objective C
@import GameKit;
Swift
import GameKit
Доступность
Доступный в OS X v10.10 и позже.
-
проигрыватель проигрыватель
СвойствоA
GKPlayer
объект раньше идентифицировал проигрыватель, кто заработал достижение. (только для чтения)Объявление
Swift
var player: GKPlayer! { get }
Objective C
@property(readonly, retain, atomic) GKPlayer *player
Оператор импорта
Objective C
@import GameKit;
Swift
import GameKit
Доступность
Доступный в OS X v10.10 и позже.
-
Булево значение, утверждающее, держится ли это достижение обычно в секрете от проигрывателя. (только для чтения)
Оператор осуждения
Используйте
hidden
свойство наGKAchievementDescription
класс вместо этого.Объявление
Swift
var hidden: Bool { get }
Objective C
@property(assign, getter=isHidden, readonly, atomic) BOOL hidden
Оператор импорта
Objective C
@import GameKit;
Swift
import GameKit
Доступность
Доступный в OS X v10.8 и позже.
Осуждаемый в OS X v10.10.
-
Выпустите вызов достижения списку проигрывателей.
Объявление
Swift
func issueChallengeToPlayers(_
playerIDs
: [AnyObject]!, messagemessage
: String!)Параметры
playerIDs
Массив
NSString
объекты, содержащие идентификаторы проигрывателя проигрывателей, являющихся оспариваемым.message
Текстовое сообщение для отображения к оспариваемым проигрывателям.
Обсуждение
Этот метод должен использоваться только для реализации собственного пользовательского интерфейса проблемы. Когда местный игрок направляет Вас, чтобы сделать так, необходимо только выпустить проблемы.
Если достижение отмечено, как скрытый в Подключении iTunes, или если оспариваемый проигрыватель уже заработал достижение, и это не отмечено как replayable, то проблема не выпущена.
Оператор импорта
Objective C
@import GameKit;
Swift
import GameKit
Доступность
Доступный в OS X v10.8 и позже.
Осуждаемый в OS X v10.10.
-
Сообщает прогресс проигрывателя Игровому Центру.
Объявление
Swift
func reportAchievementWithCompletionHandler(_
completionHandler
: ((NSError!) -> Void)!)Objective C
- (void)reportAchievementWithCompletionHandler:(void (^)(NSError *error))
completionHandler
Параметры
completionHandler
Блок, который вызовут после работы, завершается.
Блок берет следующий параметр:
error
Если работа была успешна, это значение
nil
; иначе, этот параметр содержит объект, описывающий произошедшую проблему.Обсуждение
Когда проигрыватель делает успехи к завершению достижения, Ваша игра передает прогресс проигрывателя в Игровой Центр путем вызова этого метода. Объект достижения неявно связывается к местному игроку, аутентифицировавшемуся, когда создавался объект; когда тот же местный игрок все еще аутентифицируется на устройстве, Ваша игра должна только сообщить о прогрессе.
Когда о прогрессе успешно сообщают, успехам добиваются видимые, если это было ранее скрыто.
percentComplete
иlastReportedDate
значения свойств, сохраненные на Игровом Центре, обновляются если новоеpercentComplete
значение больше, чем значение, ранее сохраненное на Игровом Центре. если значениеpercentComplete
свойство было равно100.0
, тогда достижение отмечено, как завершено, и баннер может быть показан проигрывателю.Когда этот метод вызывают, он создает новую фоновую задачу для обрабатывания запроса. Метод тогда возвращает управление Вашей игре. Фоновая задача автоматически обрабатывает сетевые ошибки, снова посылая данные, пока не завершается задача. Когда задача завершена, Гэйм Кит вызывает Ваш обработчик завершения. Обработчик завершения всегда вызывают на основном потоке.
Оператор импорта
Objective C
@import GameKit;
Swift
import GameKit
Доступность
Доступный в OS X v10.8 и позже.
Осуждаемый в OS X v10.10.
См. также
-
selectChallengeablePlayerIDs (_: withCompletionHandler:) - selectChallengeablePlayerIDs:withCompletionHandler:
(OS X v10.10)Находит подмножество проигрывателей, которые могут заработать достижение.
Объявление
Swift
func selectChallengeablePlayerIDs(_
playerIDs
: [AnyObject]!, withCompletionHandlercompletionHandler
: (([AnyObject]!, NSError!) -> Void)!)Параметры
playerIDs
Массив
NSString
объекты, содержащие список проигрывателей. Список проигрывателей используется для нахождения тех проигрывателей, которые приемлемы зарабатывать достижение.completionHandler
Блок, который вызовут, когда завершается загрузка.
Блок получает следующие параметры:
challengeablePlayerIDs
Массив идентификаторов проигрывателя, представляющих проигрыватели в исходном массиве, которые в состоянии завершить проблему. Если ошибка произошла, этот параметр может быть не -
nil
, когда массив содержит любую информацию о достижении, Гэйм Кит смог выбрать.error
Если ошибка произошла, этот объект описывает ошибку. Если работа завершилась успешно, это значение
nil
.Обсуждение
Когда этот метод вызывают, он создает новую фоновую задачу для обрабатывания запроса. Метод тогда возвращает управление Вашей игре. Позже, когда задача завершена, Гэйм Кит вызывает Ваш обработчик завершения. Обработчик завершения всегда вызывают на основном потоке.
Оператор импорта
Objective C
@import GameKit;
Swift
import GameKit
Доступность
Доступный в OS X v10.8 и позже.
Осуждаемый в OS X v10.10.