私はJavascriptゲームを持っています。単純なものです。サーバーにゲームレベルを保存したいのですが、一度にすべてをロードするのではなく、必要なときに非同期でロードします。
私はバックエンドホスト(PHPなどはありません)を持っていませんが、あらゆる種類のファイル(テキスト、画像、jsスクリプトファイル)でレベルを維持できます。
レベルをロードするための良い解決策は何ですか?
私はJavascriptゲームを持っています。単純なものです。サーバーにゲームレベルを保存したいのですが、一度にすべてをロードするのではなく、必要なときに非同期でロードします。
私はバックエンドホスト(PHPなどはありません)を持っていませんが、あらゆる種類のファイル(テキスト、画像、jsスクリプトファイル)でレベルを維持できます。
レベルをロードするための良い解決策は何ですか?
ネイティブのJSONパーサーが搭載されていて、簡単にテストできるため、JS(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 / text / HTML / XML)を非同期でダウンロードし、JSコードで使用できるようにするだけです。
私の場合、JSオブジェクトに簡単に変換できるため、サーバーにレベル情報を保存するためにJSON形式を使用するのが最善です。