无缝滚动瓷砖地图

时间:2010-10-31 05:23:35

标签: c++ c map

我正在开发一个自上而下的RPG,并希望实现无缝滚动地图。也就是说,当玩家探索世界时,地图之间没有加载屏幕,下一个区域没有“门”。

我有两种打破世界的方法。在顶层,我有“区域”,它只是9个“地图”的集合(这些区域仅由目录表示)。在区域内,9个地图被组织成3x3网格。我还没有找到表示这些地图的最佳方式,无论是通过索引还是通过它的父区域的相对坐标。这些地图实际上是呈现给用户屏幕的。考虑到每个地图的大小以及视口的大小,我知道当用户位于地图的一角时,用户最多只能看到四张地图。

我的问题是,当玩家探索世界时,如何在代码中跟踪地图及其各自的偏移量?我正在考虑让map<Point, Map*> 0,0是玩家当前所在的地图。如果玩家位于地图的左下角,那么东边的地图将存储为1 ,0,南面的地图是0,1,东南面的地图是1,1。我预见到的问题是,我不确定这些点是否可变,如果每次玩家移动到另一个地图或地图的不同部分时重建列表都会导致问题。

4 个答案:

答案 0 :(得分:2)

这与我正在尝试使用FreeBASIC编写的游戏完全一样。我正在做的事情略有不同,但也许它可以提供一些帮助。

我有一张1024 ^ 2的世界地图(所以我可以分形生成它)。世界地图上的每个陆地广场都是REGION地图(具有程序历史的微型王国),但我制作的区域地图非常容易。区域图是128 ^ 2,我有四个在256 ^ 2阵列中。当你靠近边缘时,它会移动地图并创建2-3个新区域(尽管它只创建一个历史记录 - 玩家所在的区域)。

这些内部是256 ^ 2 ZONE贴图,其也在512 ^ 2阵列中平铺2x2。同样,当接近边缘时,它会移动并生成新的边缘。

前段时间我尝试过一个3x3网格,但不得不拒绝它效率低下。

答案 1 :(得分:1)

考虑一下deques deques。这样,所有4个方面的插入和删除都很容易。

答案 2 :(得分:1)

好吧,如果你有一个3x3指针数组的地图,而你的左上角是0,0,如果你进入你北面的房间,你可以做什么,你可以做类似的事情 maps[1,1] = maps[1,0]; 将每个地图向下移动一个并重新加载顶行。

祝你好运!希望您找到有效的解决方案!

答案 3 :(得分:1)

建议:视口。

我在GPS设备上工作,定义了大面积的绘图,但是屏幕只能定义整个区域的一部分或视口。滚动包括移动视口(或更改显示的内存位置),以及重新加载屏幕(使用图形芯片)。

这个概念就像一个3x3网格。视口从中心开始。向左移动,更改显示内存的地址。

希望这有帮助。

BTW,这是一个嵌入式系统,应用程序可以100%控制所有硬件设备(而不是与其他应用程序共享)。