2010-10-31 69 views
3

我正在研究自顶向下的RPG,并希望实现无缝滚动贴图。也就是说,当玩家探索世界时,地图之间没有加载屏幕,并且没有到下一个区域的“门”。无缝滚动瓷砖地图

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

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

+0

整个世界会一次回忆吗?或者你会在玩家走路时加载相邻区域? – 2010-10-31 05:32:23

+0

他们将在玩家走路时加载。我一直在思考这个问题,也许它不像我想的那么难。我可以保留加载的地图列表。当我遍历列表来渲染它们时,我只是预先形成一些检查来查看它们与玩家所在地图之间的关系。我可以保留一个指向“当前地图”的指针,以检查列表中的所有地图。如果玩家在地图范围之外,那么我可以卸载它。 – rcapote 2010-10-31 05:36:41

回答

2

这就像我在用FreeBASIC写的游戏一样。我在做的事情略有不同,但也许可以有所帮助。

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

这些内部是256^2区域地图,它也在512^2阵列中平铺2x2。再次,接近边缘时,它会移动并产生新的边缘。

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

1

考虑一下deque deques。这样在所有四面插入和删除都很容易。

1

那么如果你有地图的3x3的指针数组,你有0,0是左上角,如果你去到房间的北面,你可以做什么,你可以做这样的事情每个 maps[1,1] = maps[1,0]; 举动映射一个并重新加载第一行。

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

1

建议:视口。

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

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

希望这会有所帮助。

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