0

我正在构建一个javascript - html5 canvas横向卷轴游戏。地形基本上包含在一个像这样的复式表上:

      -1   2   10  
-----------------
0     b    a    c
-----------------
2     a    b    a
-----------------
5     a    a    b
-----------------

(列和行代表地图上的位置,a,bc说明该空间的内容)。

我不知道如何保存这个表,以便以后可以快速检索它的任何范围。我也想不出任何可以帮助我搜索解决方案的术语,因此任何信息和标记问题的帮助都会有所帮助。

4

2 回答 2

0

使用 JSON 保存此类数据:

var map = {
    '0': {
        '-1': 'b',
        '2': 'a',
        '10': 'c'
    },
    '2': {
        '-1': 'a',
        '2': 'b',
        '10': 'a'
    },
    '5': {
        '-1': 'a',
        '2': 'a',
        '10': 'b'
    }
};

并像这样检索您的数据:map['2']['-1'].

你也可以这样改变它map['2']['-1'] = 'c'

如果您愿意,可以编写一些更容易操作此对象的函数。

于 2012-12-08T18:16:13.187 回答
0

试试 JSON:JavaScript 对象表示法。幸运的是,您也可以使用它来标记数组。

我不知道您是否要存储“保存”之类的数据 - 这样如果用户离开页面,他可以从他离开的地方继续 - 或者您是否要将数据存储为地图的内部表示。

“保存”:
您可以为此使用 sessionStorage,但我相信这是 HTML5 功能(不确定)。无论如何,这里是它的 caniuse 页面:http ://caniuse.com/#search=sessionStorage 。
例子:

window.sessionStorage.setItem("map", "{'-1': {0:b, 2:a, 5:a}, '2': {0:a, 2:b, 5:a}, '10':{0:c, 2:a, 5:b}}");

然后稍后使用以下命令检索它:

var map = window.sessionStorage.getItem("map");
map = JSON.parse(map);
map[-1][0]; // Should be 'b'

缺点是您只能将字符串存储在 sessionStorage 中,但看看我是如何使用JSON.parse(). 如果要对对象进行字符串化,可以使用JSON.stringify().

内部表示:

yabol 在这方面打败了我,但我打算提出同样的建议:

var map = {'-1': {0:b, 2:a, 5:a}, '2': {0:a, 2:b, 5:a}, '10':{0:c, 2:a, 5:b}};

这次不是字符串。它会被 JS 编译器解析为一个对象(也许你已经知道了)。

于 2012-12-08T18:20:11.370 回答