季节性排行榜
在本教程中,我们将介绍排行榜的版本控制概念。 在多种情况下,我们希望具有给定排行榜的不同版本。 例如,在具有每月锦标赛模式的游戏中,排行榜的结构保持不变,但玩家最有可能发生变化,尤其是在竞争激烈的游戏中。
我们继续学习 创建基本排行榜中的示例。 想象一下,我们的街机游戏现在非常受欢迎。 因此,引入了名为“山顶”的新模式。 每个月,该游戏都有一个任何玩家都可以参加的锦标赛。 无论谁进入前 100 名,都会显示在main菜单中的特殊排行榜中,这样每个人都可以看到谁在游戏中表现最好。
创建用于版本控制的排行榜定义
在前面的示例中,创建排行榜定义时,有一个提示,提示参数对于版本控制的重要性 VersionConfiguration
。 在这里,我们将详细介绍如何使用它及其工作原理。
public static async Task CreateLeaderboardDefinitionAsync(PlayFabAuthenticationContext context, string leaderboardName)
{
PlayFabProgressionInstanceAPI leaderboardsAPI = new PlayFabProgressionInstanceAPI(context);
CreateLeaderboardDefinitionRequest leaderboardDefinitionRequest = new CreateLeaderboardDefinitionRequest()
{
AuthenticationContext = context,
Name = leaderboardName,
SizeLimit = 1000,
EntityType = "title_player_account",
VersionConfiguration = new VersionConfiguration()
{
MaxQueryableVersions = 12,
ResetInterval = ResetInterval.Month,
},
Columns = new List<LeaderboardColumn>()
{
new LeaderboardColumn()
{
Name = "arcadeScoreTournament",
SortDirection = LeaderboardSortDirection.Descending,
}
}
};
PlayFabResult<PlayFab.LeaderboardsModels.EmptyResponse> createLbDefinitionResult = await leaderboardsAPI.CreateLeaderboardDefinitionAsync(leaderboardDefinitionRequest);
}
与基本排行榜相比,此示例中的main差异是 VersionConfiguration
参数。 此参数允许我们定义一个 MaxQueryableVersions
设置,该设置指定我们可以查询的同一排行榜的多少个版本。 在本例中,我们将它设置为查询 12 个版本,以便查询 12 个更新的排行榜。 参数 ResetInterval
定义重置过程发生的频率。 此操作涉及使用与之前相同的配置创建一个排行榜,但为空,并且版本参数将更改如下:N = N + 1,在创建排行榜定义时 N = 0。
例如,假设有一个版本参数等于 2 的排行榜,排行榜上有一百个条目。 现在,当我们增加该排行榜的版本时,结果将是一个新的排行榜,其版本参数等于 3 且为空。 同时,上一个排行榜仍保留在系统中进行查询。
可以 ResetInterval
采用多种方式工作。 在此示例中,它是每月一次,但可以根据开发人员的需求对其进行更改。 在此特定情况下,这意味着排行榜将从配置的那一刻起每月自动重置。 我们支持以下重置策略:
- 天
- 小时
- 手动
- 月
- 周
有关所有可用配置的详细信息,检查此处的 API 文档:创建排行榜的 API 参考
递增排行榜的版本
使用此新配置,我们可以为锦标赛模式提供同一排行榜的多个版本。 但是,如果由于问题而需要手动重置排行榜并重新开始锦标赛,会发生什么情况呢? 在这种情况下,可以使用 API 执行手动重置。 下面是使用 SDK 的示例:
public static async Task ResetLeaderboards(PlayFabAuthenticationContext context, string leaderboardName)
{
PlayFabProgressionInstanceAPI leaderboardsAPI = new PlayFabProgressionInstanceAPI(context);
IncrementLeaderboardVersionRequest resetLeaderboardRequest = new IncrementLeaderboardVersionRequest()
{
AuthenticationContext = context,
Name = leaderboardName,
};
PlayFabResult<PlayFab.LeaderboardsModels.IncrementLeaderboardVersionResponse> resetLeaderboardResponse = await leaderboardsAPI.IncrementLeaderboardVersionAsync(resetLeaderboardRequest);
}
查询旧版本
现在,如果需要查询旧版排行榜,可以使用 version
所有 GetLeaderboards API 上可用的 参数。
下面是使用 SDK 的示例:
public static async Task<List<EntityLeaderboardEntry>> GetLeaderboard(PlayFabAuthenticationContext context, string leaderboardName)
{
PlayFabProgressionInstanceAPI leaderboardsAPI = new PlayFabProgressionInstanceAPI(context);
GetEntityLeaderboardRequest getLbRequest = new GetEntityLeaderboardRequest()
{
LeaderboardName = leaderboardName,
StartingPosition = 1,
PageSize = 20,
AuthenticationContext = context,
Version = 1
};
PlayFabResult<GetEntityLeaderboardResponse> lbResponse = await leaderboardsAPI.GetLeaderboardAsync(getLbRequest);
return lbResponse.Result.Rankings;
}
现在,我们将处理排行榜上版本控制的任何挑战。 此处的一个重要方面是,由于在服务中使用存储,我们决定保留作为版本而保留的排行榜定义的数量将按流量计费。 在此处查看有关此内容的详细信息:
结论
在本教程中,我们学习了如何执行以下操作:
- 创建具有正确重置策略的排行榜。
- 递增排行榜的版本。
- 查询排行榜的旧版本。