Skip to main content
XBOX 服务的排行榜由用户统计派生,并通过查询构建。这与 Steam 的排行榜不同 —— Steam 的排行榜由上传到 API 的“分数”驱动。与成就类似,XBOX Game Development Kit(GDK)提供两种 stats API:基于事件与作品管理型。与成就不同的是,我们推荐使用基于事件的 stats 与排行榜,而不是作品管理型。本主题重点介绍该 API。有关这两种 API 差异的更多信息,参见 基于事件与作品管理型 Stats 两个平台都在各自门户中定义排行榜。区别在于,XBOX 服务需要你先在 Partner Center 定义 stat 规则,然后基于该规则驱动的 stat 构建排行榜。Steam 则不区分两者:你在其门户中或以编程方式创建排行榜,然后直接将用户分数上传到该排行榜。 为了展示每种 API 相较 Steam Leaderboard API 的用法,下面提供在 Steam SDK 与基于事件的 XBOX Game Development Kit(GDK)stats 平台上,如何为“行走最远距离”(该示例来自 Steamworks API 文档)创建排行榜的代码示例。以下小节逐步说明其逻辑。

在门户中创建 stat/排行榜

Steamworks

在 Steamworks 管理门户中,进入 Stats & Achievements > Leaderboards。按下方截图(来自 Steamworks 文档)所示填写表单。 Screenshot of the form used to create a leaderboard in the Steamworks Admin Portal

XBOX Game Development Kit(GDK)(基于事件)

在 Partner Center 中,进入你的游戏并选择 XBOX services > Gameplay settings。在右侧窗格的导航栏选择 Player Stats > Stat Rules,添加一条类型为 Show 的 stat 规则,并按需配置。由于我们的 stat 更新将包含玩家(用户)自上次更新以来行走距离的差值,我们会指定一个测量字段,让服务从中获取此值。
将更新事件的数据存储在事件的 Measurements 或 Dimensions 字段中在功能上没有区别。这两个字段的存在是为了配合 Application Insights 使用。更多信息参见 [Application Insights API for custom events and
metrics](https://learn.microsoft.com/en-us/azure/azure-monitor/app/api-custom-events-metrics)。 以下截图展示了在 Partner Center 中创建 stat 规则时使用的表单。 Screenshot of the form used to create a stat rule in Partner Center 保存后,在右侧窗格的顶部选择 Leaderboard,并创建一个由你刚才创建的 stat 驱动的新排行榜,如下方截图所示。 Screenshot of the form used to create a leaderboard in Partner Center

上传分数

Steamworks

在 Steamworks 中,你需要计算行走英尺的新累计值,并通过 ISteamUserStats::UploaderLeaderboardScore 方法发送到 API。

XBOX Game Development Kit(GDK)(基于事件)

对于 XBOX Game Development Kit(GDK)的基于事件 stats,你只需将“行走英尺”的差值传给 XblEventsWriteInGameEvent,因为我们已经指定:在收到事件时对该 stat 做增量更新,并在 measurements JSON 字符串中指定了该 diff 值的位置,如下所示。
更多信息参见 写入事件以驱动基于事件的 Stat

获取全球排行榜

在 Steamworks SDK 中,可通过调用 ISteamUserStats::GetLeaderboardEntries,然后在 callback 中调用 ISteamUserStats::GetDownloadedLeaderboardEntry 获取全球排行榜的每条条目(“行”)。

Steamworks

XBOX Game Development Kit(GDK)(基于事件)

XBOX Game Development Kit(GDK)API 遵循类似模式。构建查询,指定要哪张排行榜、覆盖的范围、排序方式、是否包含额外字段等。使用查询调用 XblLeaderboardGetLeaderboardAsync 后,可以使用 XblLeaderboardGetLeaderboardResultSizeXblLeaderboardGetLeaderboardResult 将结果填入指定缓冲区并遍历,如以下代码示例所示。
更多信息参见:

获取社交排行榜

在 Steamworks 中,你可以使用 ELeaderboardDataRequest::k_ELeaderboardDataRequestFriends 枚举,将排行榜限定在当前用户的好友范围内。 在 XBOX Game Development Kit(GDK)中,这称为 社交排行榜。要从 XBOX 服务获取社交排行榜,在 XblLeaderboardQuery 结构体中,将 xboxIUserId 设为当前登录 XBOX 服务用户的 XBOX 用户 ID(XUID),将 leaderboardName 设为 nullptr,并将 socialGroup 设为 XblSocialGroupType::PeopleXblSocialGroupType::Favorites。然后按前述方式调用 XblLeaderboardGetLeaderboardAsync 更多信息参见 XblSocialGroupType 除了用于生成类似 Steam 风格排行榜的常规用户 stats 外,XBOX 服务还有一个额外概念 —— Featured Stats。Featured Stats 会出现在 XBOX 生态中你游戏的多个位置,可以展示用户 stats 或已经生成的排行榜的值。你的游戏最多可以创建 20 个 Featured Stats。 有关 Featured Stats 及其添加方式的更多信息,参见 Featured Stats 概览基于事件的 Featured Stats 门户配置

速率限制

写事件时,注意不要过于频繁地调用 XBOX Services API(XSAPI),否则可能触发游戏的速率限制,导致意外行为并影响用户体验。请注意,这是 XBOX 服务侧的问题,在 Steam 上不存在 —— Steam 中写 stat 值直到游戏显式同步之前不会触发 API 调用。 对于频繁发生的事件,可以考虑批量 API 调用 —— 累计一定事件数或在特定时间间隔后再向服务器同步。 你可以使用 XBOX Live Trace Analyzer(XblTraceAnalyzer.exe) 调试 API 调用。 有关 XBOX 服务速率限制的更多信息,参见 细粒度速率限制
最后修改于 2026年8月24日