繁体   English   中英

如何存储 2D 瓷砖 map?

[英]How to store a 2D tile map?

考虑一下《塞尔达传说:通向过去》中的瓷砖和图层。 将这个 map 存储在磁贴编辑器中的理想方法是什么? 目前我正在使用一个多维矩形数组作为单层。 这些瓦片层的列表包括 map。 每个矩形都对应于图块集中的矩形。 但是,这样做的问题是在编辑 map 时应该允许编辑 map 大小(宽度、高度和层数)。

目前,当有人编辑 map 的尺寸时,我只需创建一个具有指定尺寸的新数组。 这工作正常,但现在我添加了撤消和重做支持,它开始使事情复杂化,因为每次用户更改 map 的尺寸时,我必须在每次更改之前存储整个 map 的副本。 现在我正在考虑其他方式。

最好只有一个 MAX map 大小并在启动时制作该大小的阵列,这样我就不必创建新的 arrays 并经常复制数据? 也许使用 List 的 List 而不是多维数组呢?

我不确定我对当前设置的感觉如何。 最初我对此很好,但现在我有第二个想法。 我目前根本没有注意到放缓,所以也许我正在做过早的优化(这当然是不好的)并且应该忘记整篇文章。 我不确定。 不过,我想听听大家的想法。

出于撤消/重做操作的目的,您可以放心地假设为此不需要优化,原因如下。

1)不会经常使用撤消/重做操作来更改 map 尺寸。 通常,在编辑 map 时,尺寸不会经常更改。

2) 即使使用了撤消/重做操作,重新创建数组也不一定是大问题。

您可以将“Tile”存储为它自己的 object,并让数组中的每个元素都是对“Tile”object 的引用。 在 32 位计算机上,256x256 map 应该需要 256 KB 用于切片引用,而 1024x1024 map 需要 4 MB 用于切片引用。 瓦片本身中的数据可以保留在 memory 中而不会被移动。

在现代计算机上,4 MB 数组副本不会花费任何明显的时间。

如果数据大小必须更大,那么最好的解决方案是警告用户更改维度无法撤消。 在更改尺寸之前,用户应保存一份 map 的副本。 同样,尺寸不会经常改变,并且由于地图在尺寸改变后通常会完全不同,因此用户可能倾向于拥有先前版本的副本。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM