GameCenter是iOS游戏不可或缺的一个环节,可以有效的为玩家提供交流和竞技平台。
今天我要解决GameCenter的第一个问题成就解锁。
先来看一下成就解锁的一般逻辑:
1.在游戏启动的时候进行的动作
我们姑且知道OnlineSubsystem类来处理GameCenter事务。
有OnlineSub.PlayerInterface.AddReadAchievementsCompleteDelegate( );
上边是什么逻辑呢?
我们首先查看成就是否被解锁,然后上边的代理就是查看完成后的动作。
查看成就是否被解锁的功能是
OnlineSub.PlayerInterface.ReadAchievements();
2.玩家在玩游戏获得成就时的动作
OnlineSub.PlayerInterface.GetAchievements()来获得所有成就状态。相当于我们让士兵站在队列中,然后挑选那个伙计是我们目前能搞到的。
在返回的数组中查找匹配的ID。
如果bWasAchievementOnline是false(也就是当前成就没有被解锁)。
vola,我们播放一个欢呼声或是UI庆祝这个成就解锁!
调用OnlineSub.PlayerInterface.UnlockAchievement( )。
OnlineSub.PlayerInterfaceEx.ShowAchievementsUI()可以显示成就解锁的UI。
3.现在来看技术细节
我们创建成就调用处理器,AntAchievementHandlerActor或是Object都可以。
他的工作职责有
①存储等待处理的成就列表
②解锁成就
解锁成就UnlockAchievement()的参数通常与末尾数值匹配
com.mygames.killzone3.achievement_01,用1开始而不是0.
③检索成就是否在待处理成就数组中,不能将一个成就解锁两次嘛。
④如果开始处理一个未解锁的成就,就将标志位ProcessingAchievements设置为true。因为异步处理循环的需要
⑤我们在读取处理成就的时候读取所有成就列表,ReadAchievements 同时代理函数AddReadAchievementsCompleteDelete