我在JavaScript中构建一个简单的基于图块的2D游戏,我想知道在客户端存储地图数据的最佳方法。
在服务器上,我将地图存储在64x64块中,当玩家进入当前64x64块的象限时,我会请求接下来的三组。
因此,我绝对需要将块拆分为四叉树,其中每个节点是地图的1/4。
我想知道如何在四叉树中存储每个象限。我最关心的是我能够快速解析数据。当我请求新的64x64地图时,我需要准备好它才能让玩家看到它。如果我将地图数据存储为二维数组,则存储它需要O(N ^ 2)时间,这是我不满意的,特别是因为我正在做3x 4096个图块。是否有可能将其归结为O(nlogn)?
如果它有帮助,我有一个简单的游戏世界演示。目前,它只是将一个64x64块复制到2D阵列中。 https://rawgit.com/Meredithrs/HTML5-Canvas/master/game-window-demo/index.html
答案 0 :(得分:1)
根据我的理解
首次优化
您可以尝试将允许的移动位置仅存储在主要图块的单维数组中,而不是存储所有图块的位置。这将大大减少数据存储。
另一项优化
您还可以将视图拆分为四个象限。 (比如分而治之)
<强>例如强> 如果总维度为[400,400]
将其拆分为
- [0,0] - [ 200,200]
- [200,0] - [400, 200]
- [0, 200] - [200, 400]
- [200,200] - [400, 400]
然后创建四个单维数组,每个象限下允许位置坐标[x,y]。
现在根据图块位置,选择哪个象限数组。然后迭代它以查找是否允许移动。
优化可以做得更多..祝你的项目好运:))