IOS GameCenter编程入门
注意本篇为基础教程,主要你用GameCenter的现有组成原件进行编程,如果希望进行高度自定义化的编程请参考苹果的 GameCenter Programming Guide
本篇博客分为以下几个部分:
1.GameCenter中的几个核心概念:
//初始化认证相关
GKPlayer
//访问GameCenter中心有关
GKGameViewController
GKAchievement
GKChallenge
GKLeadBoard
//通讯有关
GKMatchRequest
GKMatch
GKMatchMaker
GKMatchMakerViewController
2.GameCenter的具体实例:
初始化
查看leadBoard/challenge
匹配
通讯
GameCenter核心概念
GKPlayer
(数据包装类)
概述:用来指代GameCenter中的玩家,里面主要包含了关于游戏玩家的ID,姓名,是否好友,等等信息,具体请查看reference
GKLocalPlayer继承自GKPlayer
(功能类)
概述:用来指代本地玩家,即玩家自己
与GKPlayer不同点:GKPlayer主要是一个数据类,而GKLocalPlayer可以说是一个功能类.
主要功能:
1.进行本地GameCenter的登录,只有登录后,才能进行后面的一系列的操作
2.获取好友自己的好友信息
3.获取自己的leadBoard的信息
4.注册listener(监听有没有人向自己发起游戏邀请)
5.进行游戏保存方面的处理
GKGameViewController
(控制器类)
概述:管理系统自带的控制中心的界面在程序中的显示,提供了显示,排行榜,成就,挑战等功能
主要功能:
通过对viewState的选择来控制显示leadBoard,Achievements,Challenges界面
GKAchievement
GKChallenge
GKLeadBoard
概述:获取成就,挑战,积分榜信息
GKMatchRequest
概述:游戏匹配申请,在这里面自己调整参数,来生成自己想要的游戏申请,比如两个人的对战,三个人的对战
GKMatchMaker
概述:进行游戏匹配
GKMatchMakerViewController
概述:系统已经帮我们定义好的游戏匹配界面,我们只需要向它提交,GKMatchRequest就可以进行匹配申请,其中可以选择是邀请好友,或是自动匹配对手
GameCenter流程图
GameCenter具体实例
1.LocalPlayer的认证
let lp = GKLocalPlayer.localPlayer() //lp:=LocalPlayer
//下面的过程在程序中完成的位置越早越好,比如在AppDelegate中,向localPlayer传送一个closure,localplayer会在需要的时候自动调用closure
lp.authenticateHandler = {(VC,error) in
//VC是一个用来进行GameCenter登录的视图控制器,如果VC不为空,那么就显示视图控制器来要求用户登录
if VC != nil {
self.window?.rootViewController?.presentViewController(VC, animated: true, completion: nil)
}else if lp.authenticated{
println("Player authenticated")
}else {
println("Player didn't authenticated")
}
}
2.查看leadBoard 或是Chanllenge或是Achievement
let gameVC = GKGameCenterViewController()
gameVC.gameCenterDelegate = self
gameVC.viewState = GKGameCenterViewControllerState.Leaderboards//属性还可以是GKGameCenterViewControllerState.Achievements或是GKGameCenterViewControllerState.Challenges
self.presentViewController(gameVC, animated: true, completion: nil)
3.匹配
//初始化matcheRequest
let matchRequest = GKMatchRequest()
matchRequest.minPlayers = 2;
matchRequest.maxPlayers = 2;
matchRequest.defaultNumberOfPlayers = 2;
//通过matchRequest初始化GKMatchmakerViewController
let mmVC = GKMatchmakerViewController(matchRequest: matchRequest)
mmVC.matchmakerDelegate = self;
self.presentViewController(mmVC, animated: true, completion: nil)
接下来会通过delegate返回GKMatch对象
func matchmakerViewController(viewController: GKMatchmakerViewController!, didFindMatch match: GKMatch!) {
self.dismissViewControllerAnimated(true, completion: nil)
self.match = match
match.delegate = self
if !matchStarted && match.expectedPlayerCount == 0 {
matchStarted = true
}
}
4.通讯
//发送
let helloString = "hello"
let dataToSend = helloString.dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: true)
match.sendDataToAllPlayers(dataToSend, withDataMode: GKMatchSendDataMode.Reliable, error: NSErrorPointer())
//接受通过GKMatch的delegate进行接收
func match(match: GKMatch!, didReceiveData data: NSData!, fromPlayer playerID: String!) {
if let helloString = NSString(data: data, encoding: NSUTF8StringEncoding){
println(helloString)
}else{
println("can't resolve recieved data")
}
}
文章到这里就完了,如果要了解更多的信息,可以参考苹果的GameKit开发指南,如果文中有任何不对的,欢迎指正,还有就是这是我第一篇博客的啦,如果有小错误的话,希望大家能多多包涵