免责申明(必读!):本博客提供的所有教程的翻译原稿均来自于互联网,仅供学习交流之用,切勿进行商业传播。同时,转载时不要移除本申明。如产生任何纠纷,均与本博客所有人、发表该翻译稿之人无任何关系。谢谢合作!
原文链接地址:http://www.raywenderlich.com/3276/how-to-make-a-simple-multiplayer-game-with-game-center-tutorial-part-12
程序截图:
我正在实验以一种新的方式来撰写教程--通过采纳你们的建议来写教程!
在网站右边,你会发现一个新的区域,在那里,你们可以通过投票的方式来决定下一篇教程是什么。(当然,在原作者网站上面,我这里没有啦:)
在第一次投票中,你们中的好多人说,想让我写一篇关于如何制作一个简单的多人在线游戏教程---现在满足你们的要求!
在这个2部分系列教程中,你将会学习到如何使用cocos2d和game center来做一个简单的2人联机玩的小游戏。
这个游戏非常简单,就是一只狗与一只猫在比赛跑步---你点屏幕点得越快就越容易赢得比赛!
这个教程假设你对于cocos2d的基础知识已经非常熟悉了。如果你对于cocos2d完全陌生的话,你可以需要先看看这个网站里的其它教程。
注意:为了完整实践本系列教程,你必须注册iOS开发者,这样的话,你才可以激活Game Center。当然,你将至少需要一台物理设备(这样的话,你就可以运行一个程序在模拟器上面,另一个程序在你的设备上面啦)。最后,你将至少需要2个不同的Game Center帐号来测试(不用担心,你可以创建n个免费的帐号,只需要提供不同的邮件地址就ok了)
准备好了吗?出发!
Getting Started
这个教程将教你如何向一个简单的游戏里面添加matchmaking和多人在线支持。
因为游戏逻辑并不是本教程的重点,所以,我已经准备好了一些代码,只是还没有联网功能。
下载上面链接中的代码,编译并运行,你将会看到下面的游戏截屏:
这个游戏非常简单,而且代码注释良好---你可以直接去研究代码,但是要确保你能够看懂每一行代码。
如果你们对些代码感兴趣的话,我可以再单独写一个教程来教大家如何从头开始构建一个这样的游戏。(如果你愿意,请到原作者的网站上面去投票!)
激活Game Center:总览
现在,你已经有了一个非常简单的可以玩的游戏了,但是,它很无聊,因为你老是自己跟自己玩!
如何使用Game Center的话,这个游戏会变得灰常有趣,因为你可以邀请朋友和你一起玩,或者使用matchmaking来随机查找线上的玩家。
但是,在你开始写任何Game Center代码之前,你需要做以下2件事情:
让我们一步步来:
创建和设置一个App ID
第一步就是创建并设置一个App ID。首先,你需要登录到 iOS Dev Center,然后进到 iOS Provisioning Portal。
在那里,选择App IDs标签,然后为你的应用程序创建一个App ID,和下面的图类似(需要你填写的值可能有差异)。
最重要的部分就是Bundle Identifier--你需要设置它为一个唯一的字符串(因此,你不能使用这个教程里我所使用过的!!!)最佳做法是使用你的域名来避免名字冲突。
一旦完成之后,点击Submit。然后打开Cat Race Xcode工程,选择Resources\Info.plist,然后输入你在iOS Provisioning portal里面输入的任何唯一的字符串,如下所示:(注意,要填写你自己的)
最后一件事,Xcode有时候会出问题,特别是在你更改了bundle identifier之后,因此,为了保证万无一失,你需要做以下3步:
恭喜---现在你已经为你的应用程序创建App ID了,而且接下来会使用到它。下面,你可以通过ITunes Connect注册你的应用程序并激活Game Center。
在Itunes Connect中注册你的程序
接下来,登录到 iTunes Connect并为你的应用创建一个新的入口(entry)。
一旦你登录入到iTunes Connect以后,选择Manage Your Applications,然后点左上角的蓝色的“Add New App”按钮。
在出现的第一个屏幕中,在App Name中输入Cat Race,SKU Number中输入CRI,然后选择你之前创建的id,类似于下面的截屏:
点continue,并按照提示输入关于你的app的一些基本信息。
不用担心你填写的值对不对,尽管乱填,因为你之后还是可以改的---你只需要往里面添加一些傻瓜式的icon和screenshoot就可以让iTunes Connect很happy了。
当你做玩这些之后,点Save。如果一切ok,你将会到达“Prepare for Upload”阶段,如下图所示:
点右上角的蓝色的“Manage Game Center”按钮,然后点“Enable”按钮,再点“Done”。就这么多,你的app的Game Center功能已经激活了,接下来是时候写一些代码了。
顺便提一下,在“Manager Game Center”部分,你可能注意到了leaderboards和Achievments等选项。不过,这篇教程中,我们并不会介绍它们,但是,如果你们对此感兴趣的话,你可以在我即将出版的书里找到。
认证本地的用户:策略
当你的游戏开始的时候,第一件事你需要做的就是认证本地玩家。
你可以把它看作是“把玩家添加进Game Center”。如果他已经登录了的话,那么会收到“Welcome Back!”消息。否则,它会要求玩家输入用户名和密码。
认证本地用户是非常容易的---你只需要调用 authenticateWithCompletionHandler就可以了。你可以选择性地传入一个block,当用户被认证身份以后就会回调这个block。(block是ios的新特性,ios3.0之前是不能使用的)
但是,这里有个技巧。还有另外一种方式让用户登录和登出。他可以先打开你的app,然后切换到Game Center app,从这里登录或登出,然后回到你的app。
因此,你的app在用户认证状态改变的时候应该得到通知。你可以注册一个“authentication changed” notification。
因此,我们的策略来认证用户的过程如下:
- 创建一个单例类来管理所有与Game Center相关的代码.
- 当单例对象创建的时候,它会注册“authentication changed” notification。
- 游戏将调用单例对象上的一个方法来认证用户。
- 不管什么时候用户被认证(或登出),“authentication changed”回调将会触发。
- 这个回调将会追踪用户当前是否被认证。
现在,你已经知道怎么做啦,让我们直接coding吧!
认证本地用户:实现
打开Cat Race项目,点 File\New\New File,然后选择 iOS\Cocoa Touch\Objective-C class,再点Next。选择NSObject作为基类,再点Next,把它命名为GCHelper,然后点Finish。
把GCHelper.h换成下面的形式:
这里导入了GameKit头文件,然后定义了两个bool型的实例变量--一个用来追踪设备是否支持game center,还有一个用来追踪当前用户是否被认证。
我们也需要创建property,这样的话就可以直接查看game center是否可用。同时,还需要定义一个静态方法用来创建单例,还有一个认证本地用户的方法(这个方法会在app启动的时候被调用)
接下来,回到GCHelper.m,然后替换成下面的样子:
#pragma mark Initialization static GCHelper sharedHelper = nil;
) sharedInstance {
if ! sharedHelper) {
sharedHelper [[GCHelper alloc] init];
}
return sharedHelper;
}
这里synthesize gameCenteravailable属性,然后定义了单例方法的实现。
注意,有很多方式可以实现单例方法,但是,我们这里使用了最简单,我们没有考虑多线程的情况。
接下来,在sharedInstance方法后面加入下列代码:
// check for presence of GKLocalPlayer API Class gcclass (NSClassFromString( @" GKLocalPlayer " ));
check if the device is running iOS 4.1 or later Nsstring reqsysVer 4.1 ;
Nsstring currSysver [[UIDevice currentDevice] systemVersion];
BOOL osversionSupported ([currSysver compare:reqsysVer
options:NSNumericSearch] != NSOrderedAscending);
(gcclass && osversionSupported);
}