我正在开发一款自上而下的角色扮演游戏,并希望实现无缝滚动 map 。也就是说,当玩家探索世界时, map 之间没有加载屏幕,也没有通往下一个区域的“门”。
我有两种方法可以打破世界。在顶层,我有“区域”,它只是 9 个“ map ”的集合(这些区域仅由目录表示)。在区域内,9 张 map 被组织成一个 3x3 的网格。我还没有想出表示这些 map 的最佳方式,无论是通过索引还是通过与其父区域的相对坐标。这些 map 实际上是呈现在用户屏幕上的。给定每张 map 的大小和视口(viewport)的大小,我知道当用户位于 map 的一角时,他们最多只能看到四张 map 。
我的问题是,当玩家探索世界时,我如何在代码中跟踪 map 及其各自的偏移量?我在想有一个 map<Point, Map*>
0,0 是玩家当前所在的 map 。如果玩家位于 map 的左下角,则东边的 map 将存储为 1,0,南边的 map 将为 0 ,1 和 map 东南方将是 1,1。我预见的问题是,我不确定点是否可变,如果每次玩家移动到另一张 map 或 map 的不同部分时重建列表会导致问题。
最佳答案
这与我在 FreeBASIC 中编写的游戏中尝试做的完全一样。我正在做的事情略有不同,但也许可以提供一些帮助。
我有一张 1024^2 的世界地图(因此我可以分形生成它)。世界地图上的每个土地方 block 都是一个 REGION map (一个具有程序历史的微型王国),但我使区域 map 非常容易生成。区域 map 是 128^2,我在 256^2 数组中有四个。当你靠近边缘时,它会移动 map 并创建 2-3 个新区域(尽管它只创造了一个历史——玩家所在的区域)。
这些内部是 256^2 ZONE map ,它们也在 512^2 数组中平铺 2x2。同样,当接近边缘时,它会移动并生成新的边缘。
前段时间我尝试过 3x3 网格,但由于效率低下而不得不拒绝。
关于c++ - 无缝滚动瓦片 map ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4061964/