有效地在内存中存储大的2d地图

时间:2013-04-25 15:25:21

标签: javascript

我正在创建一个2d平铺游戏口袋妖怪,所以我正在创建一个地图编辑器来创建地图。
游戏将在网络上,因此地图编辑器必须是网络 我不知道如何将地图存储在内存中:
我以为我可以使用二维数组,但地图可能很大,导致大量内存使用/内存不足问题。
如何在不使用所有浏览器内存的情况下有效地将整个地图存储在内存中?

3 个答案:

答案 0 :(得分:1)

标准似乎没有将整个地图加载到内存中,而只是映射世界中引用的当前视口或bounds

您可以检查任何地图平移上的边界,滚动或缩放并获取相应的图块。

答案 1 :(得分:0)

存储地图的内存不应太大。您可以创建将数据存储在json中的特殊映射文件。

echo json_encode(array(array(4, 2, 6, 4), array(4, 2, 6, 4), array(4, 2, 6, 4), array(4, 2, 6, 4)));
// do some loading of the generated file
var map = <...>, i, j; // loaded data

for(i in map) {
  if(map.hasOwnProperty(map[i]))
  // etc
}

数组中的数字指向id,例如,只是为了保持小。你也可以把瓷砖名称放在那里。

答案 2 :(得分:0)

我也正在做一个二维平铺游戏......

您可以使用单独的数组来更轻松地创建地图,如下所示:

var mapX = [];
var mapY = [];
var mapType = [];

mapX是瓷砖x位置的数组,mapY是瓷砖y位置的数组,mapType描述瓷砖的类型(例如0 =水,1 =草,2 =污垢,3 =摇滚等)。然后你可以有一个函数来制作像这样的瓷砖:

function createTile(x,y,type){
mapX.push(x);
mapY.push(y);
mapType.push(type);
}

使用中:

createTile(50,50,1);

会在位置(50,50)处创建草砖。