0

I have a Javascript game, simple one. I want to store game levels on my server but not load all of them at once, but rather load then when they're needed, asynchronously.

I don't have any back-end host (no PHP etc.), but I can keep my levels in any kind of file (text, image, js script file).

What's a good solution to loading levels?

4

2 回答 2

2

我更喜欢 JS (JSON),因为你有一个原生的 JSON Parser,你可以很容易地测试它。您可以将任何其他格式与 XHR (XMLHttpRequest/Ajax) 一起使用。您还可以在本地文件上使用 XHR ( http://forums.mozillazine.org/viewtopic.php?f=25&p=6033635 )。

这是一个通过 XHR 加载 JSON 的示例类LevelLoader

if ( typeof gamens== 'undefined') {
    var gamens= {};
}

gamens.LevelLoader = function() {
       this.leveldata = {};
};

gamens.LevelLoader.prototype = {

    fromString : function(data) {
        this.leveldata = JSON.parse(data);
        // this.repaint();
    },

    fromFile : function(name) {
            var xmlhttp = xhr();
            xmlhttp.open("GET", "level/" + name + ".js", true);
            xmlhttp.onreadystatechange = function() {
                if (xmlhttp.readyState == 4) {
                    this.fromString(xmlhttp.responseText);
                }
            }
            xmlhttp.send(null);
        }
};


var loader = new gamens.LevelLoader(); 
// load "level/test.js"  
// example: 
// {"tiles":[0,1,1]}
loader.fromFile("test"); 
console.log(loader.leveldata);

返回 XMLHttpRequest 对象的 xhr 函数:

var xhr = function() {
    var _xhr = false;
    if (window.ActiveXObject) {
        try {
            _xhr = new ActiveXObject("Msxml2.XMLHTTP");
        } catch (e) {
            try {
                _xhr = new ActiveXObject("Microsoft.XMLHTTP");
            } catch (ex) {
                _xhr = false;
            }
        }
    }
    if (!_xhr && typeof XMLHttpRequest != 'undefined') {
        try {
            _xhr = new XMLHttpRequest();
        } catch (e) {
            _xhr = false;
        }
    }
    if (!_xhr && window.createRequest) {
        try {
            _xhr = window.createRequest();
        } catch (e) {
            _xhr = false;
        }
    }
    return _xhr;    
};
于 2013-02-21T12:33:59.327 回答
0

看看AJAX。它允许您在不刷新页面的情况下从服务器加载其他信息。您将如何将其存储在服务器上 - 取决于您。您只需要可以通过某些 URL 访问这些文件。它只是允许从服务器异步下载任何数据(JSON/文本/HTML/XML)并在您的 JS 代码中使用它。

对我来说,最好是使用 JSON 格式来在服务器上存储关卡信息,因为它可以很容易地转换为 JS 对象。

于 2013-02-21T12:26:19.810 回答