我有一个简单的Javascript游戏。我想在我的服务器上存储游戏关卡,但不是一次加载所有游戏关卡,而是在需要的时候异步加载。异步。
我没有任何后端主机(没有PHP等),但我可以将我的关卡保存在任何类型的文件中(文本,图像,js脚本文件)。
什么是加载级别的好方法?
答案 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对象。