我一直在使用phaser JavaScript框架制作可以放入HTML的游戏,而我似乎无法弄清楚如何制作高分系统。
我只能找到像this one这样的解决方案,但它似乎在客户端系统上本地存储了高分值,因此他们只能看到自己的高分。如果可能的话,我希望能够获得最高级别和名字的全球高分。
据我所知,我很可能必须创建一个SQL数据库来存储所有这些并使用node.js在游戏和数据库之间移动它(我对SQL和node.js的知识非常有限)但是我不知道#39;具体知道应该如何配合Phaser。任何帮助表示赞赏。
答案 0 :(得分:0)
由于您不知道SQL(并且您不会持有那么多数据),您可以使用JSON文件。这个答案假设您有一台服务器(如果您计划使用Node.js,则需要一台服务器)。另外,我假设您要制作一个old-school high score table,并带有分数和名称。
这打算成为一般指导。您需要找到如何以您选择的语言解释我所解释的内容。
在您的服务器中,您将拥有一个文件(例如scores.json),如下所示:
{
"data": [
{
"name": "Destroyer",
"score": 23
},
{
"name": "yo momma",
"score": 5
},
{
"name": "Joe",
"score": 1
},
// And so on...
]
}
同样在您的服务器中,您需要在特定端口上监听某些内容(您可以使用Node.js,PHP,Ruby,Python等),这是您提出请求的地方。这个脚本将做的是(在JavaScript中):
handleRequest(request) {
// Fetch your file and populate the array
var scoresTable = ...
// On request, decide which type of request it is
if (request.type === "getHighScoresTable") {
// If it wants the scores, return the json as a string
return scoresJson;
} else if (request.type === "submitScore"
&& request.score > scoresTable[scoresTable.length - 1].score) {
// Otherwise, check if the submitted score makes it into the table.
// If it does, search its position and replace.
scoresTable.forEach(function(value, index) {
if (value.score < request.score) {
scoresTable.splice(index, 0, {"name": request.name, "score": request.score});
}
});
// Trim the last element and return
scoresTable = scoresTable.slice(0, -1)
// You probably want to update your file here
}
}
现在,在您的JavaScript客户端文件上,当您想要保存新分数或获得高分表时,您应该向服务器AJAX request。 jQuery提供nicer syntax。
$.ajax({
url: 'urlToYourServer',
type: 'GET',
data: '{
"type": "submitScore",
"name": "I beat Joe",
"score": 2
}'
});
在发送之前检查客户端的分数是否足够高可能是个好主意。此外,您可能需要考虑一些安全措施,因为任何用户都可以欺骗他们的客户请求。