Вступление
Game Center — социальная игровая сеть Apple. Он позволяет пользователям отслеживать свои высокие результаты в таблице лидеров, сравнивать достижения, приглашать друзей играть в игру и запускать многопользовательскую игру с помощью автоматического сопоставления. Так что, если вы создали игру для iOS и хотите, чтобы пользователи могли публиковать свои результаты в таблице лидеров Game Center, этот учебник для вас!
Для получения дополнительной информации о приложениях и игровом центре посетите страницу Apple Developer .
Проект XCode
Для этого урока я создал базовый проект Xcode, который вы можете скачать с GitHub. Я объясню все необходимые шаги для создания таблицы лидеров в iTunes Connect и код, необходимый для отправки оценки, а также кнопку для открытия таблицы лидеров из приложения.
Вот как выглядит раскадровка приложения:
В этом проекте есть UILabel с красным текстом, который я назвал scoreLabel
и несколько кнопок UIB . Красный добавит 10 очков к счету и отправит его в таблицу лидеров Game Center, а синий откроет GKGameCenterViewController и покажет эту таблицу лидеров.
Самое первое, что нужно сделать, это включить Game Center на вкладке « Возможности » в XCode.
Затем вы должны импортировать GameKit вверху файла ViewController.swift и добавить протокол GKGameCenterControllerDelegate
в объявление класса.
1
2
3
4
5
6
|
import GameKit
class ViewController: UIViewController,
GKGameCenterControllerDelegate
{
|
Давайте добавим несколько переменных сейчас. Вы можете вставить этот код прямо в ваш класс ViewController
:
1
2
3
4
5
6
7
8
|
/* Variables */
var gcEnabled = Bool() // Check if the user has Game Center enabled
var gcDefaultLeaderBoard = String() // Check the default leaderboardID
var score = 0
// IMPORTANT: replace the red string below with your own Leaderboard ID (the one you’ve set in iTunes Connect)
let LEADERBOARD_ID = «com.score.mygamename»
|
Первая переменная указывает, включен ли у вас Game Center, а вторая будет позже использоваться кодом аутентификации локального игрока, чтобы GameKit мог определить список лидеров по умолчанию.
score
изначально будет 0, конечно.
LEADERBOARD_ID
— это String
которую вы должны установить, чтобы Game Center отправлял ваш счет на сервер через идентификатор таблицы лидеров по умолчанию. Выберите имя, которое вы хотите, но имейте в виду, что он должен иметь веб-синтаксис. Вот почему я определил эту таблицу лидеров как com.score.mygamename
, где mygamename
следует заменить именем вашего приложения строчными буквами, без пробелов.
Прежде чем включить Game Center на странице iTunes Connect вашего приложения, давайте закончим базовый код. Добавьте эту строку в viewDidLoad()
:
1
2
|
// Call the GC authentication controller
authenticateLocalPlayer()
|
И добавьте следующую функцию прямо под viewDidLoad()
:
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
|
// MARK: — AUTHENTICATE LOCAL PLAYER
func authenticateLocalPlayer() {
let localPlayer: GKLocalPlayer = GKLocalPlayer.localPlayer()
localPlayer.authenticateHandler = {(ViewController, error) -> Void in
if((ViewController) != nil) {
// 1. Show login if player is not logged in
self.present(ViewController!, animated: true, completion: nil)
} else if (localPlayer.isAuthenticated) {
// 2. Player is already authenticated & logged in, load game center
self.gcEnabled = true
// Get the default leaderboard ID
localPlayer.loadDefaultLeaderboardIdentifier(completionHandler: { (leaderboardIdentifer, error) in
if error != nil { print(error)
} else { self.gcDefaultLeaderBoard = leaderboardIdentifer!
})
} else {
// 3. Game center is not enabled on the users device
self.gcEnabled = false
print(«Local player could not be authenticated!»)
print(error)
}
}
}
|
Если пользователь не вошел в Game Center из настроек на своем устройстве, вышеописанный метод покажет экран входа в Game Center, как только он подключится к серверу GC. Как только игрок вошел в систему, приложение получает идентификатор списка лидеров по умолчанию.
В следующем методе мы заставим приложение захватить ранее созданную вами строку LEADERBOARD_ID
и передадим ее в качестве идентификатора таблицы лидеров по умолчанию сервера Game Center.
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
|
// MARK: — ADD 10 POINTS TO THE SCORE AND SUBMIT THE UPDATED SCORE TO GAME CENTER
@IBAction func addScoreAndSubmitToGC(_ sender: AnyObject) {
// Add 10 points to current score
score += 10
scoreLabel.text = «\(score)»
// Submit score to GC leaderboard
let bestScoreInt = GKScore(leaderboardIdentifier: LEADERBOARD_ID)
bestScoreInt.value = Int64(score)
GKScore.report([bestScoreInt]) { (error) in
if error != nil {
print(error!.localizedDescription)
} else {
print(«Best Score submitted to your Leaderboard!»)
}
}
}
|
Приведенный выше код также добавляет 10 баллов к текущему баллу, поэтому каждый раз, когда вы нажимаете кнопку « Добавить балл» и «Отправить в GC» , вы видите изменение красной метки баллов, и приложение отправляет этот обновленный балл в вашу таблицу лидеров GC.
Теперь вам нужно добавить метод делегата GameKit , который отклонит контроллер GC.
1
2
3
4
|
// Delegate to dismiss the GC controller
func gameCenterViewControllerDidFinish(_ gameCenterViewController: GKGameCenterViewController) {
gameCenterViewController.dismiss(animated: true, completion: nil)
}
|
Перед созданием таблицы лидеров в iTunes Connect остался только один метод — действие для кнопки, которая откроет Game Center. ViewController
.
1
2
3
4
5
6
7
8
|
// MARK: — OPEN GAME CENTER LEADERBOARD
@IBAction func checkGCLeaderboard(_ sender: AnyObject) {
let gcVC = GKGameCenterViewController()
gcVC.gameCenterDelegate = self
gcVC.viewState = .leaderboards
gcVC.leaderboardIdentifier = LEADERBOARD_ID
present(gcVC, animated: true, completion: nil)
}
|
Как вы можете видеть выше, этот код создает экземпляр контроллера GC, назначает его делегат этому контроллеру, устанавливает состояние просмотра контроллера для отображения списков лидеров и передает ваш LEADERBOARD_ID
перед представлением контроллера.
Теперь мы закончили кодирование, но вы пока не можете запустить приложение. Если вы это сделаете, вы получите сообщение об ошибке от XCode, поскольку вы не создали свой собственный список лидеров на странице iTunes Connect своего приложения.
Настройте игровой центр в iTunes Connect
Вы уже должны были создать приложение для iOS в iTunes Connect с вашим собственным идентификатором пакета. Теперь войдите в свое приложение с панели инструментов iTunes Connect, нажмите « Функции», а затем « Game Center» .
Затем нажмите значок + рядом с таблицей лидеров .
Выберите Single Leaderboard на следующем экране.
Здесь вы должны ввести имя, которое хотите дать вашей таблице лидеров. На скриншоте ниже я использовал My Leaderboard Name в качестве примера. Вы можете назвать свою таблицу рекордов Best Score или что угодно.
В поле Leaderboard ID вставьте строку LEADERBOARD_ID
мы ранее создали в проекте Xcode.
Поскольку счет является числом, выберите Integer в поле Тип формата счета . Вы можете выбрать нужный вариант для Типа представления и Порядка сортировки . Оставьте поле Оценка (необязательно) пустым.
Наконец, нажмите кнопку Добавить язык .
Во всплывающем окне вы должны выбрать язык списка лидеров. По умолчанию всегда английский. Снова введите английское имя таблицы лидеров и выберите формат счета (я выбрал запятые для разделения групп цифр).
Поля суффикса формата счета являются необязательными; Вы можете оставить оба поля пустыми или ввести желаемый суффикс. Например, если в вашей игре есть очки для очков, вы можете ввести «очко» и «очки» для множественного числа, поэтому контроллер Game Center добавит этот суффикс к концу очков, отображаемых в вашей таблице лидеров, например «1 очко» или «100». точки».
Вы также можете добавить значок. Изображение должно быть в формате .jpeg, .jpg или .png с размером 512×512 или 1024×1024 пикселей, не менее 72 DPI и в цветовом пространстве RGB без прозрачного фона. Нажмите « Выбрать файл», чтобы загрузить изображение.
Наконец нажмите Сохранить , и все готово. Вы можете повторить шаги, описанные выше, чтобы добавить больше языков — просто убедитесь, что набрали имена лидеров в соответствии с выбранным языком.
Как только вы добавили окно, вы можете проверить детали вашего списка лидеров. Если все в порядке, нажмите « Сохранить» , и вы будете перенаправлены на страницу «Функции» со своей новой таблицей лидеров.
Теперь пришло время включить Game Center в разделе App Store вашего приложения. Нажмите App Store и подготовьтесь к отправке .
Прокрутите вниз, пока не найдете Game Center с переключателем рядом с ним. Включите это, и он станет зеленым. Затем нажмите знак « +» рядом с таблицами лидеров , выберите свою таблицу лидеров в списке и нажмите « Готово» .
Нажмите « Сохранить» в правом верхнем углу окна, и все будет готово к настройке Game Center в iTunes Connect.
Теперь вы можете вернуться к своему проекту Xcode и запустить приложение на реальном устройстве или даже на симуляторе iOS. Если вы еще не вошли в Game Center, отобразится контроллер входа. Это выглядит так:
Войдите с вашими учетными данными, и вы можете начать тестирование приложения!
В нашем addScoreAndSubmitToGC()
мы добавили следующий вызов print()
:
1
|
print(«Best Score submitted to your Leaderboard!»)
|
Поэтому, если вы нажмете красную кнопку, scoreLabel
отобразит «10», а консоль scoreLabel
напечатает « Лучший результат», отправленный в вашу таблицу лидеров!
Нажмите красную кнопку еще три раза, а затем нажмите синюю, чтобы открыть таблицу лидеров, и убедитесь, что отправленный счет равен 40. Вы должны увидеть что-то вроде этого:
Вывод
Если вы хотите увидеть Game Center в действии с полнофункциональным игровым приложением, вы можете проверить мой игровой шаблон CodeCanyon Four Dots . Это шаблон для минимальной бесконечной игры, которая сохраняет лучшие результаты и передает их в Game Center.
Подобные шаблоны игр — отличный способ получить преимущество в следующей игре. CodeCanyon имеет сотни шаблонов игр для iOS, которые вы можете использовать для ускорения разработки, что позволяет вам создавать следующую игру-убийцу намного быстрее!
Спасибо за чтение, и увидимся в следующий раз! Пожалуйста, ознакомьтесь с другими нашими руководствами по разработке приложений для Swift и iOS.