首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >存储巨大的瓷砖地图的选项

存储巨大的瓷砖地图的选项
EN

Stack Overflow用户
提问于 2017-03-22 08:08:37
回答 1查看 484关注 0票数 1

我正在创建一个基于伪转弯的在线策略浏览器游戏,其中许多人在同一个世界上玩了很长时间(几个月)。为此,我想要一张64000x64000瓷砖=40亿瓷砖的地图。我需要大约6-10字节的数据,组成一个大约30 10的数据来存储地图。

每块瓷砖都应具有类型(水、草、沙漠、山)、资源(木材、奶牛、黄金)和playerBuilt(道路、建筑)等特性。

客户端只需要同时访问大约100x100块。

我已经控制了客户端的地图。我面临的问题是如何在服务器端存储、检索和修改此地图上的信息。

所需功能:

  1. 创建、存储和修改64000x64000tilemap。
  2. 将100 x100部分映射到客户端。
  3. 对地图进行修改,如道路、建筑物和耗竭的资源。

到目前为止,我所考虑的是:

  1. 过程生成:在运行过程中生成地图中需要的任何部分。确保给定相同的种子,它总是生成相同的地图。我在这方面的主要问题是在游戏期间会对地图进行修改。注意:在游戏期间,只有不到1%的瓷砖会被修改,并且可以将修改的坐标存储在外部数组中。在过程生成的基础上加载它们。
  2. 数据库:在游戏开始时生成地图,并将其存储在数据库中。一位朋友建议我不要这么大的瓷砖地图,并告诉我,我可能会想把它存储在记忆中。
  3. 将其全部保存在服务器端的内存中:将其保存在数据结构中的内存中。如果地图较小,这似乎是一个很好的方法,但对于40亿块来说,这将是一个很大的记忆。

我计划在这个项目的后端使用java+mysql。我还处于早期阶段,如果需要的话,我愿意改变技术。

我的问题是:上述三种方法中哪一种似乎可行和(或)是否有其他我没有考虑过的办法?

EN

回答 1

Stack Overflow用户

发布于 2018-01-11 15:05:03

取决于:

  • 你有多少内存(或播放器/用户)
  • 大多数平铺图是空的(稀疏的)吗?对面是稠密的。
  • 有没有默认的地形(比如空的还是水的?)

如果稀疏,则使用hashmap而不是2D数组。

如果密度很大,那么它将更加具有挑战性,您可能需要使用数据库或一些特殊的数据结构+缓存。你可以探测到热点区域,并将它们保存在记忆中一段时间,死区(没有玩家,没有活动.)可以存储在数据库中,按需读取。您还可以多次加载数据:首先是地形,然后是其他对象.每个层可以以不同的方式存储。例如,地形可以是perlin噪声产生的+另一层,可以修改。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42945963

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档