Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/432.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript:存储地图数据的最佳方式?_Javascript_Html_Canvas_2d_Tile - Fatal编程技术网

Javascript:存储地图数据的最佳方式?

Javascript:存储地图数据的最佳方式?,javascript,html,canvas,2d,tile,Javascript,Html,Canvas,2d,Tile,我正在用JavaScript构建一个简单的基于平铺的2D游戏,我想知道在客户端上存储地图数据的最佳方法 在服务器上,我将地图存储在64x64块中,当玩家进入其当前64x64块的象限时,我将请求接下来的三组 因此,我肯定需要将块分割成一个四叉树,其中每个节点是贴图的1/4 我想知道如何在四叉树中存储每个象限。我最关心的是我能以多快的速度解析数据。当我需要一张新的64x64的地图时,我需要在玩家能够看到它之前准备好它。如果我将地图数据存储为二维数组,则需要O(N^2)个时间来存储它,这一点我并不满意

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

在服务器上,我将地图存储在64x64块中,当玩家进入其当前64x64块的象限时,我将请求接下来的三组

因此,我肯定需要将块分割成一个四叉树,其中每个节点是贴图的1/4

我想知道如何在四叉树中存储每个象限。我最关心的是我能以多快的速度解析数据。当我需要一张新的64x64的地图时,我需要在玩家能够看到它之前准备好它。如果我将地图数据存储为二维数组,则需要O(N^2)个时间来存储它,这一点我并不满意,特别是因为我将使用3x4096个平铺。是否有可能将其降到O(nlogn)


如果有帮助的话,我有一个简单的游戏世界演示。目前,它只是将一个64x64块复制到一个二维数组中

根据我的理解

第一次优化

您可以尝试仅在主磁贴的一维数组中存储允许的移动位置,而不是存储所有磁贴的位置。这将大大减少数据存储

另一个优化

您还可以将视图拆分为四个象限。(就像分而治之)

例如 如果总尺寸为[400400]

像分开一样分开

         - [0,0] - [ 200,200]
         -  [200,0] - [400, 200]
         -  [0, 200] - [200, 400]
         -  [200,200] - [400, 400]
然后创建四个一维数组,每个象限下有允许的位置坐标[x,y]

现在根据平铺位置,选择哪个象限阵列。然后遍历它以确定是否允许移动


优化还可以做得更多。。祝您的项目好运:)

我不会在映射数组中存储基元,因此我应该能够执行map.get(x,y).isWalkable(),这不需要迭代,具体取决于我使用的数据结构。我更关心的是尽快将数据从字符串传输到数据结构。