如何使用Phaser创建全球高分?

时间:2017-09-21 18:57:42

标签: javascript sql node.js phaser-framework

我一直在使用phaser JavaScript框架制作可以放入HTML的游戏,而我似乎无法弄清楚如何制作高分系统。

我只能找到像this one这样的解决方案,但它似乎在客户端系统上本地存储了高分值,因此他们只能看到自己的高分。如果可能的话,我希望能够获得最高级别和名字的全球高分。

据我所知,我很可能必须创建一个SQL数据库来存储所有这些并使用node.js在游戏和数据库之间移动它(我对SQL和node.js的知识非常有限)但是我不知道#39;具体知道应该如何配合Phaser。任何帮助表示赞赏。

1 个答案:

答案 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
        }'
    });

在发送之前检查客户端的分数是否足够高可能是个好主意。此外,您可能需要考虑一些安全措施,因为任何用户都可以欺骗他们的客户请求。