基于事件的排行榜概述
本主题介绍了排行榜如何通过显示所选游戏统计信息来比较玩家。
排行榜是一种鼓励玩家参与和推动玩家之间竞争的有趣方式。 Xbox 服务提供了适合硬核玩家(在整个 Xbox 玩家群体中拥有全球排名)的功能和适合普通玩家(在自己的朋友圈中拥有社交排名)的功能。
你可以使用两种类型的排行:全球和社交。 它们的概念非常类似,但它们在配置和意向方面存在根本差异。
全球与社交排行榜
全球排行榜
全球排行榜对整个 Xbox 用户群进行排名,必须进行配置。
全球排行榜是由你在引入时(游戏发布前或者发布后的任何时间)的服务中配置的预定义视图。
社交排行榜
社交排行榜动态生成,并显示玩家好友的排名。
社交排行榜仅包括玩家社交图中的玩家。
社交排行榜不需要在引入时进行预定义,因为该服务会基于现有用户统计信息在运行时动态生成排行榜。
了解排行榜
排行榜有两个主要组件。
要针对其进行排名的值(在 Xbox 服务中,这始终是玩家统计信息)。
排序顺序(升序或降序)
作为排名值的统计信息
排行榜派生自玩家统计信息,因此为所需的内容定义正确的统计信息规则至关重要。 在设计游戏时,请记住你希望使用哪些排行榜对玩家进行排名。
全球排行榜
全球排行榜会跟踪由玩家在 Xbox 社区中创下的最高得分记录。 全球排行榜的主要区别在于,它们通过指定排行榜识别名称、排名统计信息和排序顺序(升序或降序)在引入时进行预定义。
“游戏”可以定义无限数量的全球排行榜,并且可以随时通过服务配置添加更多排行榜。 每个全球排行榜的最大记录数目前限制为 10,000 条。 这意味着对于“最佳”分数未排在前 10,000 位的玩家而言,其分数不会显示在排行榜中。
可以一次在一“页”中读取最多 100 条排行榜条目(玩家 XUID、玩家代号、全球排名和分数)、指定页面的起始排位,或检索以指定玩家代号为中心的排行榜条目。 结果始终限定为所有时间的结果;日、周和月视图尚不受支持。
可以通过使用 GET (/scids/{scid}/leaderboards/{leaderboardname})
借助 Xbox 服务 API (XSAPI) 或我们的 REST API 访问全球排行榜。
下面是如何为赛车游戏配置示例排行榜的屏幕截图。
社交排行榜
社交排行榜可以有效地激励休闲玩家与其好友进行比较和排名。 即使不在社区的最高级别,他们仍然有动力去击败自己认识的玩家。 社交排行榜是基于任何现有用户统计信息动态创建的。因此无需在引入时预定义,并且只包含特定玩家社交图中的玩家。
社交排行榜的主要优势在于,它们不是预定义的。 你可以为游戏的任何统计信息创建社交排行榜。 在请求社交排行榜时调用方可以指定两件事:统计信息实例和排序顺序(默认按排名递减)。 结果始终限定为所有时间的结果;日、周和月视图尚不受支持。
对于全球排行榜,调用方可以一次在一“页”中读取最多 100 条排行榜条目(玩家 XUID、玩家代号、全球排名和分数)和指定页面的起始排位。
通过使用 GET (/users/xuid({xuid})/scids/{scid}/stats/{statname)/people/{all|favorite})
借助 XSAPI 或 REST API 来访问社交排行榜。
包含社交视图的全球排行榜
由于社交排行榜是动态创建的,因此,检索社交排行榜所需的时间会长于检索全球排行榜的用时。 如果游戏需要基于一组普通条件频繁检索社交排行榜,则可以创建全球排行榜,然后仅在其中检索与玩家社交图相关的排行榜条目。
这会导致检索时间比社交排行榜更快,因为排行榜已存在于 Xbox 服务服务器上。 它还会产生较小的有效负载,因为结果的范围限于用户的社交图。 此类排行榜是一个全球排行榜。 因此,必须在游戏的服务配置中进行定义。
通过使用正常的全球排行榜请求 GET (/scids/{scid}/leaderboards/{leaderboardname})
并将以下查询附加到 URL:&viewTarget=people&view=people
来访问包含社交视图的全球排行榜。
要支持多列排行榜视图,可以使用统计信息元数据。 游戏可以定义排行榜统计信息的元数据字段,当查询排行榜排名时,可以返回这些字段。 游戏不应使用批处理用户统计信息 URI 来实现相同的行为,因为隐私设置可能会阻止统计信息访问。
多列排行榜
在某些情况下,需要在排行榜中添加更多列来提供详细的统计信息。 例如,对于击败敌人最多的排行榜,你可能希望添加玩家使用的武器、事件发生的地图、击败最多敌人的类型以及击杀/死亡比率。
Xbox 排行榜具有内置的多列支持。 你可以轻松获取这些类型的排名。 唯一的先决条件是用于排行榜的统计信息已经定义了统计信息上下文。 它将用作额外的元数据。 例如,对于 FastestLap 统计信息,你可能希望将这些附加属性配置为统计信息上下文。 以下屏幕截图显示了它们可能的外观。
现在,统计信息通过上下文将持久保留,所以如果检索多列排行榜,其外观将类似于以下表格。
运算符 | 值 (FastestLap) | CarModel | WeatherCondition | TrackId |
---|---|---|---|---|
SUM | 常量或字段 | 模型 A | 多雨 | 9 |
MIN | 字段 | 模型 A | 晴朗 | 9 |
MAX | 字段 | 模型 B | 晴朗 | 2 |
REPLACE | 常量或字段 | 模型 C | 多云 | 1 |
目前,全球排行榜和具有社交视图的全球排行榜都支持多列排行榜。 但是,如果希望创建多列社交排行榜,可以使用批处理用户统计信息调用来获取所有统计信息及其上下文,然后创建排行榜。
只有通过使用正常全球排行榜请求 GET (/scids/{scid}/leaderboards/{leaderboardname})
并将以下查询附加到 URL:&include=valuemetadata
,才能通过我们的 REST API 访问多列排行榜。
包含精选统计信息的排行榜的显示位置
排行榜通过显示所选的游戏统计信息来比较玩家。
排行榜是鼓励玩家之间竞争的好方法。 排行榜激励玩家不断努力超越自己之前的最好成绩和好友的成绩。
精选统计信息的排行榜将始终显示在游戏的官方俱乐部中。
精选统计信息的排行榜有时显示在其他 Xbox 体验中,例如,玩家个人资料中的成就视图。
还可以使用你配置的精选统计信息在游戏内创建排行榜。
选择合适的排行榜
排行榜与所定义的统计信息相对应。 应该选择与玩家可以努力提升而实现的成就相对应的排行榜。
例如,在赛车游戏中,“单圈最快时间”就是很好的排行榜,因为玩家会希望努力缩短其“单圈最快时间”。 其他示例为射手的“击杀/死亡”比,或格斗游戏中的最大连击数。
排行榜显示时间
你可以随时在游戏中显示排行榜。 应该选择排行榜不会影响玩游戏或者游戏流的时间。 例如,两轮之间和比赛之后就是显示排行榜的好时间。
编程指南
可以使用几个排行榜 API 来获取排行榜的当前状态。 所有 API 都是异步的,因此不会阻塞。
发出获取排行榜数据的请求,并继续执行常规游戏处理。 在该服务返回排行榜结果后,您可以在适当的时间显示这些结果。
在希望显示排行榜数据之前,请稍微提前从服务请求排行榜数据。 此操作可以防止玩家在等待排行榜显示时受到阻止。