排行榜

排行榜是向任何游戏增加社交和竞争元素的好途径。以这种方式在您的玩家中促进竞争很有趣。服务器支持的单个排行榜没有数量限制,其中每个都是分数榜,跟踪单独的记录。

对于您游戏中的分数值应该代表什么,服务器没有特别的要求。排行榜刚创建时,按值排序。如果您在记录中使用的是单圈时间或货币,您会首选以 ASCDESC 模式对结果排序。在创建时,您还必须指定运算符来控制如何将分数提交到排行榜:“best”、“set”、“incr”或“decr”。

您可以用排行榜跟踪您在意的任何分数。一些恰当的例子:最高分、最长的生存时间、最快的单圈时间、最快的级别达成以及任何其他可以作为竞争标准的东西!

排行榜在服务器中是动态的,因为它们不需要像您以前使用过的 Google Play Games 或 Apple Game Center 那样进行预配置。排行榜可通过服务器端代码创建。

排行榜对象 #

每个排行榜都是一个记录集合,其中每条记录都是带有元数据的排名分数。排行榜由一个 ID 对其进行唯一标识。

排行榜记录依据其配置的排序方式排序:DESC(默认)或ASC。排序方式在创建排行榜时即已确定,之后无法更改。

运算符 #

配置使用以下 operator 值设置排行榜记录分数的方式:

  • set - 值将被设置为提交的分数
  • best - 仅当提交的分数高于现有分数时,才会更新该值
  • incr - 此值将增加正提交给它的分数
  • decr - 此值将减少正提交给它的分数

创建排行榜后将无法更改运算符。在创建后,所有排行榜配置都是不变的。如需更改排序方式或运算符,应当删除排行榜,并新建一个排行榜。

通过将条目 ID 设置为用户 ID 和当前 Unix 时间的组合,您可以实现街机风格的排行榜(其中单个用户发布多个条目)(例如,<user-id>:<unix-time>)。

重置时间表 #

您可以为每个排行榜分配一个可选的重置时间表。排行榜中包含的记录将按照此时间表过期,在每个重置周期用户都能提交新分数。在每个重置周期结束时,服务器会使用当前排行榜状态触发回调。请阅读排行榜最佳做法并参见分层联赛指南,其中有用例示例。

在创建排行榜时,以 CRON 格式定义重置时间表。如果排行榜没有重置时间表,则其记录永不过期。

排行榜记录 #

每个排行榜包含一个按其分数排序的记录的列表。

所有记录都属于所有者。这通常是一个用户,但也可以是其他对象,例如群组 ID 或某种其他自定义 ID。每个所有者将仅拥有每个排行榜的一条记录。如果排行榜到期,每个所有者都可以提交一个新的分数,该分数将滚动。

随着所有者的进步,每条记录中的分数将被更新。分数可以根据需要随时更新,并且可以根据排行榜排序顺序和运算符的组合进行增减。

记录的元数据 #

每条记录在提交时可有选择地包含分数或所有者的附加数据。附加字段必须采用 JSON 编码,且作为元数据提交。

元数据的一个用例是驾驶游戏中的比赛状况,例如天气,这可以在用户列出分数时提供额外的 UI 提示。

1
2
3
4
5
{
  "surface": "wet",
  "timeOfDay": "night",
  "car": "Porsche 918 Spyder"
}

创建排行榜 #

排行榜可以在开始时或在注册功能内通过服务器端代码创建。给予排行榜的 ID 用于向其提交分数。

提交分数 #

用户可向排行榜提交分数并随时更新它。在提交分数后,排行榜的预配置排序和运算符决定运算将有什么效果。

“set”运算符将确保排行榜记录始终保留最新的值,即使此值比前一个值更差也是如此。

用“best”运算符向排行榜提交,可确保记录跟踪此记录出现过的最佳值。对于降序排行榜,这是指最高值,对于升序则是指最低值。如果没有此记录的先前值,其作用就像“set”。

使用“incr”运算符时,新值将添加到此记录的现有分数。如果没有此记录的先前值,其作用就像“set”。

列出记录 #

用户可以将排行榜的记录列表。这便于与其他用户比较分数并看到他们的名次。

按分数列表 #

按照排行榜中的排序方法依据分数进行排序,是列出记录的标准方法。

您可以用游标获取下一组结果。

按好友列表 #

您可以使用一些所有者 ID 筛选出仅由这些用户拥有的记录。可以使用此方法来仅检索属于用户好友的分数。

列出已过期记录 #

在每次排行榜重置后,将从排行榜排名中移除过期记录,但并不将其删除。用户可以列出所需时段的过期记录。

例如,列出上一周的过期记录:

列出围绕所有者的排行榜记录 #

获取围绕所有者的排行榜记录列表。