在没有后端的JavaScript中加载游戏关卡

时间:2013-02-21 12:18:11

标签: javascript html5 canvas

我有一个简单的Javascript游戏。我想在我的服务器上存储游戏关卡,但不是一次加载所有游戏关卡,而是在需要的时候异步加载。异步。

我没有任何后端主机(没有PHP等),但我可以将我的关卡保存在任何类型的文件中(文本,图像,js脚本文件)。

什么是加载级别的好方法?

2 个答案:

答案 0 :(得分:2)

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

这是一个将JSON加载到XHR上的示例类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;    
};

答案 1 :(得分:0)

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

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