我正在使用 JavaScript 创建一个平台游戏canvas
完全基于图块。在游戏中存储物品块(墙壁、地板、物品)的最佳方法是什么?问题是每块瓷砖都可以被摧毁或创建。
目前我有一个 2D 数组,因此我能够快速检查某个项目是否位于特定的 X 和 Y 位置。问题是当用户移动并且地图需要滚动时,我需要重新分配每个块。当该项目位于x = 0
?我不能使用负索引。
我宁愿将滚动类比为一次一个图块。另外,我计划在用户移动时随机生成地图(如果之前尚未生成)。因此,一旦产生某种东西,它就应该永远保持这种状态。
我应该提到的另一点是它也将是多人游戏。因此,在缓存数据变脏并需要从数据库获取最新数据之前,对屏幕进行分块是一个好主意。啊,我对这一切都很陌生;似乎不可能,非常感谢任何帮助。
由于您有无限的关卡,我建议您使用与已有的结构类似的结构,并稍作调整。
不是将所有内容存储在一个大数组中,并且每次用户移动时都在该数组内移动内容(哎呀),而是存储 9 块地图(每个块的大小大约是屏幕大小的两倍),当用户接近当前块的边缘,处理屏幕外的块,向左移动所有块,并将新块加载到间隙中。
希望这很清楚,但为了以防万一,这里有一个图表:
带字母的方块是地图块,红色方块是视口(我把它画得稍微太大了,记住视口比黑色方块小)。当视口向右移动时,您卸载块 A B 和 C,将所有其他块向左移动,并将新数据加载到最右边的块中。由于块的宽度是屏幕宽度的两倍,因此用户需要花时间穿过屏幕来生成/加载关卡到这些块中。如果用户在世界各地快速移动,您可以使用一组 4x4 的块来提供额外的缓冲。
解决返回到先前的地图块的问题。有几种方法可以做到这一点:
- 当不再使用这些块时,将它们写到硬盘上(或者 javascript 中的任何等效项)
- 在内存中无限扩展您的块集。与块数组不同的是,关联数组采用块的 x/y 位置并返回块(或 null,这表明用户以前从未来过这里,您需要生成它)。
- 按程序生成关卡,这很复杂,但这意味着一旦某个块离开屏幕,您就可以将其处理掉,并且确信稍后可以再次重新生成完全相同的块
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)