在JavaScript中没有后端加载游戏级别

问题描述:

我有一个简单的Javascript游戏。我想在我的服务器上存储游戏级别,但不是一次加载所有游戏级别,而是在需要时异步加载。在JavaScript中没有后端加载游戏级别

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

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

+0

如何是一个级别的结构?你有什么尝试? – pce 2013-02-21 12:20:26

+0

我还没有决定 - 我知道什么级别必须包含(这是一个二维平台游戏),但它将如何保存和服务是尚未决定 - 取决于Javascript功能 – Xlaudius 2013-02-21 12:21:20

+0

好的,我把一个可能的解决方案一个答案。 – pce 2013-02-21 13:25:54

我更喜欢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对象。