渲染非常大的2D地图

时间:2015-11-26 14:42:35

标签: java lwjgl

我想用Java和LWJGL创建一个2D游戏。这是一款复古风格的RPG游戏。所以有一个非常大的地图(约1000x1000或更大)。我想用瓷砖做,但我不知道如何保存它/如何渲染它。

我想到的东西就像是带有数字的2D数组,渲染只是在正确的位置设置了正确的图块。 但我认为地图越大,它就越慢。 我希望你能帮助我。 :)

我的第二个建议是制作一个大图像并选择它的一部分(玩家所在的部分),但是很难知道我必须在哪里进行碰撞检测,所以这只是一个荒谬的想法。

感谢您的建议!

2 个答案:

答案 0 :(得分:0)

正如上面提到的评论之一,这个主题太大了,不容易用一个答案覆盖。但我会从个人经验中给你一些建议。

只要将地图保存在2D数组中,只要地图本质上相当简单就没有问题。我使用2D整数数组创建了类似的样式图(平铺)来表示地图。然后有一个绘图方法将地图渲染到我可以显示的图像。我使用多个图层,所以我只是分别渲染地图的每一层。请注意,我的大多数地图都是100x100或更小。

我建议大型地图使用某种缓冲区。例如,仅渲染可播放屏幕以及地图外部的轻微偏移区域。例如。如果你的屏幕有效30x20瓷砖,渲染35x25,只需根据当前位置更改渲染的内容。您可以这样做的一种方法是以“块”加载地图。基本上你的地图会自动将地图划分为50x50块,并且只有在你足够接近可以使用时才会渲染一块。

我还建议让绘图方法在主游戏方法之外的自己的线程中运行。这样你就可以不断地绘制地图,而不会随机闪烁或延迟。

答案 1 :(得分:0)

我在Tiled地图编辑器中维护我的400 * 400瓷砖地图并使用Slick2D框架进行渲染。它仅支持渲染地图的可见子部分。 (TiledMap类)。

我尝试了两种方法 - 基于图像和基于平铺的地图创建,最后是后者。使用图块,您不仅可以创建地图视图,还可以创建不可见的元数据图层,例如碰撞,产生斑点,项目位置等。