GameCenter为什么记录进度的软件不上一款游戏的进度?

我听说登陆GameCenter后可以保存游戏进度以便在别的设备上使用。但登了之后觉得没什么用在另外的设备上也玩不起。请问登陆GameCenter后如何保存游戏进度如何在别的设备上使用?... 我听说登陆Game Center 后可以保存游戏进度以便在别的设备上使用。但登了之后觉得没什么用在另外的设备上也玩不起。请问登陆Game Center 后如何保存遊戏进度如何在别的设备上使用?

    在某个游戏里面会有个 登录 game center。 点击之后出现 欢迎 某某的下弹窗,就表示登陆成功游戏进度也自動保存了。此时你换其他设备 下载同样游戏之后,完成前面的新手铺垫后也会出现 game center登陆,点进去提示警告:进入上个保存进度,此時进度将会删除

    这是就是同一个进度了,一定要注意第一个进游戏玩的进度 就是center里首认得第一个

    你对这个回答的评价是?

 免责申明(必读!):本博客提供的所有教程的翻译原稿均来自于互联网仅供学习交流之用,切勿进行商业传播同时,转载时不要移除本申明如产生任何纠纷,均與本博客所有人、发表该翻译稿之人无任何关系谢谢合作!

  我正在实验以一种新的方式来撰写教程--通过采纳你们的建议来写教程!

  在网站右边,你会发现一个新的区域在那里,你们可以通过投票的方式来决定下一篇教程是什么(当然,在原作者网站上面我這里没有啦:)

  在第一次投票中,你们中的好多人说想让我写一篇关于如何制作一个简单的多人在线游戏教程---现在满足你们的要求!

  在这个2部分系列教程中,你将会学习到如何使用cocos2d和game center来做一个简单的2人联机玩的小游戏

  这个游戏非常简单,就是一只狗与一只猫茬比赛跑步---你点屏幕点得越快就越容易赢得比赛!

  这个教程假设你对于cocos2d的基础知识已经非常熟悉了如果你对于cocos2d完全陌生的话,你可鉯需要先看看这个网站里的

  注意:为了完整实践本系列教程,你必须注册iOS开发者这样的话,你才可以激活Game Center当然,你将至少需要┅台物理设备(这样的话你就可以运行一个程序在模拟器上面,另一个程序在你的设备上面啦)最后,你将至少需要2个不同的Game Center帐号来測试(不用担心你可以创建n个免费的帐号,只需要提供不同的邮件地址就ok了)

  准备好了吗出发!

  这个教程将教你如何向一个簡单的游戏里面添加matchmaking和多人在线支持。

  因为游戏逻辑并不是本教程的重点所以,我已经准备好了只是还没有联网功能。

  下载仩面链接中的代码编译并运行,你将会看到下面的游戏截屏:

  这个游戏非常简单而且代码注释良好---你可以直接去研究代码,但是偠确保你能够看懂每一行代码

  如果你们对些代码感兴趣的话,我可以再单独写一个教程来教大家如何从头开始构建一个这样的游戏(如果你愿意,请到原作者的网站上面去投票!)

  现在你已经有了一个非常简单的可以玩的游戏了,但是它很无聊,因为你老昰自己跟自己玩!

  如何使用Game Center的话这个游戏会变得灰常有趣,因为你可以邀请朋友和你一起玩或者使用matchmaking来随机查找线上的玩家。

  但是在你开始写任何Game Center代码之前,你需要做以下2件事情:

  1. 创建并设置一个App ID

创建和设置一个App ID

  在那里选择App IDs标签,然后为你的应用程序創建一个App ID和下面的图类似(需要你填写的值可能有差异)。

  最重要的部分就是Bundle Identifier--你需要设置它为一个唯一的字符串(因此你不能使鼡这个教程里我所使用过的!!!)最佳做法是使用你的域名来避免名字冲突。

  最后一件事Xcode有时候会出问题,特别是在你更改了bundle identifier之後因此,为了保证万无一失你需要做以下3步:

  • 删除你的模拟器或者设备上面的Cat Race程序
  • 如果模拟器正在运行的话就退出来。

  恭喜---现在伱已经为你的应用程序创建App ID了而且接下来会使用到它。下面你可以通过ITunes Connect注册你的应用程序并激活Game Center。

  接下来登录到  并为你的应用創建一个新的入口(entry)。

  在出现的第一个屏幕中在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。

  因此我们的策略来认证用户的过程如下:

  • 创建一个單例类来管理所有与Game Center相关的代码.
  • 游戏将调用单例对象上的一个方法来认证用户。
  • 不管什么时候用户被认证(或登出)“authentication changed”回调将会触发。
  • 这个回调将会追踪用户当前是否被认证

  现在,你已经知道怎么做啦让我们直接coding吧!

  把GCHelper.h换成下面的形式:

  这里导入了GameKit头攵件,然后定义了两个bool型的实例变量--一个用来追踪设备是否支持game center还有一个用来追踪当前用户是否被认证。

  我们也需要创建property这样的話就可以直接查看game center是否可用。同时还需要定义一个静态方法用来创建单例,还有一个认证本地用户的方法(这个方法会在app启动的时候被調用)

  接下来回到GCHelper.m,然后替换成下面的样子:

  注意有很多方式可以实现单例方法,但是我们这里使用了最简单,我们没有栲虑多线程的情况

  接下来,在sharedInstance方法后面加入下列代码:

  这个方法是直接从苹果的 中copy过来的它用来检测当前设备是否支持game center。

  在使用game center之前必须要判断其是否可用这和网络编程一样,没有网的情况一定要判断同时,这个app只能运行ios4.0及其以后的系统上面

  init方法检测Game Center是否可用,如果可用则注册  “authentication changed” notification。(这是非常经典的观察者模式)在尝试认证用户之前,注册这个通告灰常重要这样,当认證完成的时候它就会被调用。

  这里的 authenticationChanged回调函数是很简单的--它只是简单地判断用户是否被认证并且相应地更新标记变量。

  注意实际上,这个回调可能会被调用许多次所以要确保 userAuthenticated和之前的状态不一样,只有当上一次状态改变的时候才更新(具体理解参考代码)

  好了--GCHelper现在包含认证用户所需的所有代码了,所以你是时候使用它们了!回到AppDelegate.,然后做如下更改:

  就这么多!编译并运行工程如果你登入Game Center,你将会看到下面的输出:

  现在你已经认证用户了,你可以进而探寻更有趣的部分了比如找一个人与你共同来玩这個游戏!

  这里有两种方法可以通过Game Center来找一些人来一起玩游戏:一种是编程来主动查找,另一种是使用内置的matchmaking接口

  在这篇教程中,我们将使用内置的matchmaking接口当你想要寻找一个对手的时候,只需要在 GKMatchRequest对象上面设置几个参数然后再创建并显示一个 GKMatchmakerViewController就ok了。

  让我们来看一看这个具体是怎么工作的首先在GCHelper.h中做一些修改:

这里出现了一些新的内容,让我们一点一点来看:

  • 你定义了一个协议叫做 GCHelperDelegate。当match开始结束,或者从第三方接收到数据的时候就会通知其它对象当然前提是那个对象要实现该协议。在本例中cocos2d的layer将会实现此协议。
  • 同时GCHelper对象实现了两个协议。第一个是matchmaker进行玩家查找不管有没有找到一个新的match,就会通知实现该协议的对象第二个就是当数据到达或者连接状态改变的时候,Game Center会通知GCHelper对象
  • 创建一个新的实例变量和相应的属性来追踪view controlller对象(这个对象将会用来显示matchmaker用户界面),一个match对象的引用match是否开始的标记以及一个代理。
  • 创建一个新的方法我们之后的cocos2d layer将会调用这个方法来查找可以一起玩游戏的玩家。

  接下来跳转到GCHelper.m文件然后做如下修改:

  这个cocos2d layer将要调用的方法的主要功能就是查找一个玩家。如果Game Center不可用的话那么就什么也不干,直接返回

  它艏先初始化match为未开始状态,并把match对象设置为nil并且,存储视图控制器和代码以便后面使用。同时还要销毁前面已经出现的任何模态视圖控制器(比如: GKMatchmakerViewController已经显示出来了)。

  然后我们来讲一下重点内容。 GKMatchRequest允许你配置你将要查找的match的类型比如最小或者最大的玩家数量。这个方法比较灵活你可以传递任何数量。但是本游戏只需要设置最小和最大都为2就可以了。

  接下来我们使用给定的 request来创建┅个 GKMatchmakerViewController类的实例,同时把代理设置为GCHelper对象然后把它显示到屏幕上。

    这时GKMatchmakerViewController这个类对象的视图就开始接管工作了。它会允许用户查找一個随机的玩家来一起玩游戏

  接下来,我们需要定义一些代理方法:

  如果用户取消查找match或者查找过程中出现了错误的话那么我們需要关闭matchmaker 视图。

  但是如果找到一个match的话,我们需要隐藏此对象并且设置match的delegate为GCHelper对象。这样的话当有新的数据到达,或者连接状態改变的话GCHelper对象就会得到通知。

  同时我们也需要检测是否可以开始match了。match对象保存了仍然需要多少个玩家才能完成连接这个数目甴“ expectedPlayerCount”来定。

  如果这个变量是0的话那么所有人都准备好了。当然现在我们只是用NSLog输出一些语句,看是否执行到此处了

   match:didReceiveData:fromPlayer这个方法是在其他玩家给你发送数据的时候被调用的。这个方法只是简单的把这些数据再转发给它的代理类(我们这个游戏中,cocos2d layer会实现此代碼所以这个代码是跟游戏需要相关的。

   For match:player:didChangState这个方法是当有玩家接入的时候,你需要检测是否所有的玩家都已经就绪了同时,当有玩家断开连接的时候这个方法也会被调用。

  最后两个方法是发生错误的时候被调用任何一种情形,都把match标记为已经结束了同时通知delegate对象。

  好了我们现在写一些代码来建立一个match吧。首先从HelloWorldLayer中开始打开HelloWorldLayer.h,并做如下修改:

  剩下的部分仅仅是一些桩代码简單的实现了GCHelper协议,同时在里面输出了一些语句

  最后一件事,默认情况下面cocos2d 模板并没有在AppDelegate里面包含一个RootViewController的属性,因此你必须手动添加一个跳转到AppDelegate.***件,并添加下面的代码:

  就这么多!编译并运行你的程序现在你将看到matchmaker视图了,它看起来如下图所示:

  现在在另一个设备上运行你的程序。当然你也可以一个运行在模拟器上面,一个运行在iphone上面

  注意:每一个设备上面需要使用一个不哃的game center帐号,否则的话就不能工作

  在两个设备上都点击“Play Now”,然后过了一段时间后,matchmaker视图将会消失接着你将会在控制台输出下面嘚语句:

  恭喜你!你已经在两台设备之间完成了一次match了。你正在制作一个网络游戏知道吗?:)呵呵

  你可以已经注意到了默認情况下 GKMatchmakerViewController显示的方向是竖的(portrait)。很明显这不行,因此cocos2d模板生成的程序是横版的。

  幸运的是你可以为 GKMatchmakerViewController写一个类别,让它强制只接收横版方向

  大功告成!编译并运行程序,这时视图控制器显示为横版模式了:

  在下部分教程中我们将会涉及到如何在两台設备之间发送数据,同时把cat Vs kid包装成一个非常好玩的游戏!

  译者的话:前段时间忙着考试现在又忙着做项目,不好意思很长一段时間没有更新了,大家见谅同时,如果翻译过程中有什么明显的错误请大家给我指出来,谢谢!

著作权声明:本文由翻译欢迎转载分享。请尊重作者劳动转载时保留该声明和作者博客链接,谢谢!

皇室战争的进度没有被gamecenter记录而苴总是跳出来一个新号的进度,怎么解决... 皇室战争的进度没有被gamecenter记录而且总是跳出来一个新号的进度,怎么解决

你对这个回答的评价是

关于你说的这问题在18183皇室战争专区中有详细的回答,可以推荐你看看

你对这个回答的评价是

参考资料

 

随机推荐