在JavaScript中没有后端加载游戏级别
问题描述:
我有一个简单的Javascript游戏。我想在我的服务器上存储游戏级别,但不是一次加载所有游戏级别,而是在需要时异步加载。在JavaScript中没有后端加载游戏级别
我没有任何后端主机(没有PHP等),但我可以在任何类型的文件(文本,图像,js脚本文件)中保留我的关卡。
什么是加载级别的好方法?
答
我更喜欢JS(JSON),因为你有一个本机的JSON解析器,你可以很容易地测试它。 您可以使用任何其他格式的XHR(XMLHttpRequest/Ajax)。 您也可以在本地文件上使用XHR(http://forums.mozillazine.org/viewtopic.php?f=25&p=6033635)。
这是一个示例类LevelLoader
,它通过XHR加载JSON。
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;
};
答
看看AJAX。它允许你从服务器加载额外的信息而不刷新页面。你将如何将它存储在服务器上 - 取决于你。你只需要这些文件可以通过一些URL访问。 它只是允许从服务器异步下载任何数据(JSON /文本/ HTML/XML),并在您的JS代码中使用它。
至于我,最好的是使用JSON格式来存储服务器上的关卡信息,因为它可以很容易地转换成JS对象。
如何是一个级别的结构?你有什么尝试? – pce 2013-02-21 12:20:26
我还没有决定 - 我知道什么级别必须包含(这是一个二维平台游戏),但它将如何保存和服务是尚未决定 - 取决于Javascript功能 – Xlaudius 2013-02-21 12:21:20
好的,我把一个可能的解决方案一个答案。 – pce 2013-02-21 13:25:54