2014-05-03 54 views
3

我正在用JavaScript构建一个简单的基于瓦片的2D游戏,我想知道在客户端上存储地图数据的最佳方式。Javascript:存储地图数据的最佳方法?

在服务器上,我将地图存储在64x64块中,当播放器进入当前64x64块的象限时,我会请求接下来的三组。因此,我肯定需要将块分割成四叉树,其中每个节点是地图的四分之一。

我想知道如何在四叉树内存储每个象限。我最关心的是我能够多快地解析数据。当我请求一张新的64x64地图时,我需要准备好在播放器能够看到它之前准备好。如果我将地图数据存储为二维数组,则需要O(N^2)次来存储它,这并不令我满意,尤其是因为我会做3x 4096个磁贴。是否有可能将此归为O(nlogn)?

如果有帮助,我有一个游戏世界的简单演示了。目前,它只是将一个64x64块复制到二维数组中。 https://rawgit.com/Meredithrs/HTML5-Canvas/master/game-window-demo/index.html

回答

1

按我的理解

首先优化

你可能尝试在一维数组存储允许移动位置只对主瓦,而不是存储所有瓷砖的位置。这将大大减少数据存储。

另一种优化

你也可以分割你的观点分成四个象限。 (如分而治之)

例如 如果总尺寸为[400400]

分裂像

  - [0,0] - [ 200,200] 
     - [200,0] - [400, 200] 
     - [0, 200] - [200, 400] 
     - [200,200] - [400, 400] 

然后创建具有允许的位置坐标[X 4一个维数组, y]在每个象限下。

现在基于瓦片位置,选择哪个象限数组。然后遍历它来查找是否允许移动。

优化可以做更..祝你好运与您的项目:)

+0

我不会存储原始地图阵中,所以我应该能够做到map.get(X,Y) .isWalkable(),它不需要迭代,这取决于我使用的数据结构。我更关心的是尽快将数据从字符串传输到数据结构。 – Meredith

相关问题