如何创建一个固定大小的二维世界,当它到达地图的任何一侧时会重复?
当您到达地图的一侧时,您会看到地图的另一侧与此地图合并。这个想法是,如果你没有迷你地图,你甚至不会注意到地图重复的过渡。
我有一些想法如何制作: 1)保持总共3x3这样的世界一直都是完全相同并且以相同的方式更新,只有玩家只存在于其中一个。 2)另一种方法是将地图分成较小的和平,并在被问到时将它们添加到所需的位置。 无论哪种方式,完成它都会很复杂。我记得更多的是,10年前,我玩过一些类似的游戏,士兵们在重复拍摄其他AI战士时互相追随。 大多数人都听不到你对这个想法的看法以及如何实现这个想法。我在XNA(C#)编码。
答案 0 :(得分:1)
另一种方法是使用libnoise库生成噪声。这样做的好处是你可以在理论上无限的空间内产生噪音。
看看以下内容: http://libnoise.sourceforge.net/tutorials/tutorial3.html#tile
上面还有一个XNA端口:http://bigblackblock.com/tools/libnoisexna
如果你最终使用XNA端口,你可以这样做:
Perlin perlin = new Perlin();
perlin.Frequency = 0.5f; //height
perlin.Lacunarity = 2f; //frequency increase between octaves
perlin.OctaveCount = 5; //Number of passes
perlin.Persistence = 0.45f; //
perlin.Quality = QualityMode.High;
perlin.Seed = 8;
//Create our 2d map
Noise2D _map = new Noise2D(CHUNKSIZE_WIDTH, CHUNKSIZE_HEIGHT, perlin);
//Get a section
_map.GeneratePlanar(left, right, top, down);
GeneratePlanar是调用以获取每个方向的部分的功能,它将与您的世界其他地方无缝连接。
答案 1 :(得分:0)
如果游戏是基于平铺的,我认为你应该做的是:
idx = (n+i)%80
(或%100)其中n
是rect的顶部坐标(x或y),i
位于视口宽度/高度的范围内。所以这是您更详细的第二种选择。如果您只想重复地形,则应该分隔图块的内容。在这种情况下,由于您不存储内容,因此很可能会动态生成内容 希望这有帮助。