为游戏添加实时排行榜
提示
如今,向游戏添加排行榜变得更加简单!查看由GDevelop提供的内置排行榜 - 快速、灵活的排行榜,您可以在几次点击内将其添加到您的游戏中。
本指南将解释如何通过Firebase Cloud Firestore向您的游戏添加排行榜。如果您尚未这样做,请不要忘记设置Firebase。
- 选择数据结构
在制作与在线数据库交互的项目时,第一步是决定数据存储的形式。Firebase擅长查询(按数据筛选),因此我们将每个分数存储为一个名为“scores”的集合中的文档。每个文档必须是具有以下结构的变量:
{ name: "用户名称", score: 23, }
这样,我们可以按分数查询文档,然后直接获取与每个文档绑定的用户名。在这种情况下,我们不关心文档的名称,因此我们将让Firebase为这些文档分配随机名称。
- 编写安全规则
2.1 为什么需要安全规则?
现在我们已经定义了数据结构,我们需要编写安全规则来确保您的数据库不被滥用。没有规则,任何人都可以读取和写入任何内容,并使用您的数据库配额存储他们的数据,任何人都可以写入错误值,意图使游戏崩溃或者黑掉所有用户。
2.2 安全规则
在这里,我将使用以下规则:
rules_version = '2'; service cloud.firestore { match /databases/{database}/documents { match /scores/{document} { allow read; allow create: if request.resource.data.keys().hasOnly(["name", "score"]) && request.resource.data.keys().hasAll(["name", "score"]) && request.resource.data.score is number && request.resource.data.score > 1 && request.resource.data.name is string && request.resource.data.name.size() > 1 && request.resource.data.name.size() < 15; } } }
在这些规则中,X根据实际情况修改。
- 从GDevelop向数据库添加分数
要添加分数非常简单。您只需要将数据放在所选的形状中并上传它!
- 使用GDevelop从数据库获取分数
获取分数需要进行查询,仅下载几个分数,并且仅下载最好的分数。否则,我们将不得不编写排序算法,并在本地下载所有分数,这将使拥有许多分数的大型游戏非常卡顿。然后,我们将不得不更新某种界面来显示这些分数。
4.1 创建一个查询
为了本教程,我们将加载50个最佳分数。可以通过添加“Order by descending”和“Limit to 50 first”查询过滤器来实现这一目标。
4.2 等待数据
现在,我们需要等待数据获取,因为Firebase是异步的。可以通过使用以下事件简单地完成这一操作:
这将在Firebase将操作标记为完整(将“ok”放入状态变量)时触发,并将其设置回0。此最后一步是为了每次Firebase完成获取新分数时触发事件一次,以允许处理实时更新。
4.3 处理数据
要处理数据,最简单的方法是使用“对于每个子变量”事件:
这允许通过变量doc
在该事件中访问文档并通过变量i
访问列表中的位置。例如,要访问玩家的位置,您可以使用Variable(i) + 1
。+ 1
用于数组从0开始,但排行榜通常从第1位开始。要访问分数,在本教程的上下文中,您可以使用Variable(doc.data.score)
,要访问用户名VariableString(doc.data.name)
。例如,要在文本对象中显示所有内容,我们可以使用此代码:
这样,您的游戏中就有一个实时排行榜了!