c++ - 无缝滚动瓦片 map

标签 c++ c map

我正在开发一款自上而下的角色扮演游戏,并希望实现无缝滚动 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/

相关文章:

r - 如何对 R 中不同 map 中的点使用相同的色标?

c++ - 即使元素不存在,C++ STL 中的 lower_bound 也会返回一个迭代器。如何避免这种情况?

c - Frama-c,非确定性浮点值

java - 使用索引迭代 Java Map

c - void 元素上的指针减法

c++ - 指向字符串和字符的指针捕获 22

Java - 遍历包含列表的 map

c++ - boost::asio::streambuf 与 wchar_t

c++ - Linux 中的双 UDP 套接字绑定(bind)

c++ - 如何在 Windows 键盘的物理位置上分配按键?