问题背景
iOS 的 GameKit 中,使用 GKScore 来提交分数,而它的 value 是一个 int64_t 官方文档,难道说我们只能提交整数类型(int)的分数吗?如果我有有个游戏要提交浮点数(float)的分数怎么办?
解决方案
其实 Game Center 可以帮我们做到。文档中说:
The value provided by a score object is interpreted by Game Center only when formatted for display. You determine how your scores are formatted when you define the leaderboard on iTunes Connect.
也就是说,提交的时候传的数据,会根据你在 iTunes Connect 中的设置,造成最终显示的不同。
比如我用 GKScore 提交分数 123,如果在 iTunes Connect 中设置为分数格式类型为整数(Integer),那么在 排行榜(Leaderboard)中显示分数为 123;
而如果设置分数格式类型为 Fixed Point - To 2 Decimals,那么在排行榜(Leaderboard)中显示分数为 1.23。
应用举例
我有个小游戏,参与排行的数据为玩家的生存时间,以秒为单位,精确到小数点后2位。
那么我在提交前将数值 * 100,并转换为 int64_t,并在 iTunes Connect 中设置分数格式类型为 Fixed Point - To 2 Decimals 即可。
int64_t intBestScore = (int64_t)([DataUtil getBestScore] * 100);
NSString *leaderboardId = @"grp.StoneCrashBestRecord";
[[ABGameKitHelper sharedHelper] reportScore:intBestScore forLeaderboard:leaderboardId];
P.s: 这里严重推荐一下 ABGameKitHelper 这个开源项目,游戏中集成 Game Center 用它很方便。
时间: 2024-10-12 08:02:51