关于
这实际上是两个问题合二为一。首先,我正在寻找一种有效存储大量切片数据的方法。另一个方面涉及查询数据集和显示图块。让我先给你一些背景。
我们正在使用CraftyJS库制作基于浏览器的多人大亨游戏,以将其渲染到Canvas。在GUI的后台,我们在PHP上运行Yii Framework,并且它们都连接到Python随机地图生成器和游戏引擎。
这是第一个粗糙地图渲染的外观:http : //i.imgur.com/khAXtl.png
存储地图数据
每次游戏开始时,都会随机生成游戏世界。每个玩家的大小为100x100的六角形瓷砖。这意味着对于一个三人游戏,将创建90.000个图块。目前,我只是创建一个JavaScript数组来渲染地图。
这对于渲染来说效果很好,但是对于与地图的任何形式的交互,我们都需要存储哪个玩家拥有该图块,在该图块之上构建什么样的结构,它的当前价格等等。起初,至少对于原型而言,我们想使用MySQL,但是经过一些测试,它的速度并没有我想要的那么快。也许像MongoDB这样的对象存储将更适合于存储切片数据而不是SQL表。也许还有其他东西?
显示地图
我看到的另一个问题是在地图上移动。目前,我正在为每个图块创建Crafty实体,即使它不在视口中也是如此。这很慢,因为即使Crafty仅在视口中渲染那些,它也会存储并可能遍历每个渲染事件上的所有图块。我目前所拥有的是绘制的生成地图,当您四处走动时加载和停顿非常慢,现在我想使其可玩。
我的第一个想法是加载视口中显示的图块子集。但是,当玩家将视口移至空白区域时,我需要查询服务器并等待响应返回,只有这样才能渲染地图。这在本机应用程序中会很好,但在网络游戏中却比较落后。
从地图上获得平滑性能的方法可能是将较大的图块子集预加载到javascript数组中并将其用作缓存。播放器将有几个屏幕“缓存”,当他移动视口时,我将向JS“缓存”加载更多图块。
我朝着正确的方向前进吗?我很想从做过类似事情的人那里获得更多信息。我是游戏开发的新手,但是在过去的几周中,我已经经历了很多研究。