如何绘制不规则地图



  • @猫人队长 昨天说的只是其中一种思路。 要生成城的话,要看你的城是可以占多个格子的还是只占一个格子。 还有一种思路,你可以把整个地图先划分成多个小区域,然后你做一些预设的城市道路的组合,每个区域去随机这些组合来生成。 当然如果预设少的话,可能看起来就不是那么的随机了。 但其实这种思路也是可以继续拓展的,比如说,第一遍,你先随机划分区域的大小(这个你自己算坐标避免区域重叠就好)。 第二遍去遍历每个区域,根据这个区域的大小,去随机可以出现在这个大小的区域里的物件(也是你可以自定义的,比如说 城镇A可以出现在区域类型为A的区域内)。 这样生成下来,就有了一个差不多的地图, 然后可以在用各种思路去优化地图。 比如说,如果两个城市离得太近,随机选择一个城市变成空白区域,这个区域用【元胞自动机】或者其他方式去随机山和水。 水路和道路的连接,也可以尝试用这个思路,如果一个空白区域,他的左边和右边两格以内有水,那么他就变成水,道路也是一样。

    总结一下整体思路就是先按照组合的方式随机生成一个大的地图,再去优化小的细节部分。不过说了这些其实也只能给你提供一个思路,具体的算法实现还是要你自己去做。 毕竟我也不是啥大佬,之前做小游戏有涉及到这部分所以看了一下简单的算法,但是也没做过太完整的随机地图,还是要你自己去试了。。 如果你总结出来一套生成规则,也可以拿出来分享一下。



  • @DionysusF5 这个思路我也想过,还是谢谢你了。



  • @DionysusF5 那么大佬该如何绘制碰撞呢



  • @唤境用户11704324 墙的位置放置刚体



  • @DionysusF5 大佬能不能把生成的事件表截图下?不会写...另外想问下跨场景的时候怎么保存?每个位置的坐标.图块类型都要单独存2个数组,然后回来时生成?感觉这样好麻烦



  • @疑似陆飞 这个规则我是看的这位博主的想法然后在唤境上重现的,有兴趣可以去看一下他说的思路。 https://indienova.com/indie-game-development/procedural-content-generation-tile-based-random-cave-map/

    这个是生成,每个格子都生成一个地图块,地图块的类型随机选择 40082748-8e22-46d4-a820-7d5a558eba06-image.png

    这个是优化地图,每个地图块都循环一次。先获取当前地图块周围的类型为【墙壁】的地图块的数量。然后根据这个数量,决定当前地图块转变为什么类型(道路或墙壁)。 决定好后不要立刻修改,否则会影响后面的地图块的运算,先用实例变量记录自己要转变成什么类型的地图块。

    所有地图块都计算过后,再去循环一遍,去转变地图块的类型。 13543adf-1f82-4c13-b105-f4de1a0c8aea-image.png 获取周围墙壁数量就直接比较坐标就好了,这个没什么好说的。 9dda6077-110d-43da-93b9-e3977b0ff1be-image.png



  • @疑似陆飞 另外跨场景保存这个你肯定要记录坐标这些到数组的。 如果你不想记录,那就不要跨场景。 用一个图层来做大地图之类的。 但其实记录没那么麻烦。 你不需要每次跳转场景都重新记录大地图的样式,在第一次生成的时候顺便去记录就好了。 后面重新回到大地图就直接用数组里的坐标去重新生成一遍。



  • @DionysusF5 感谢,确实时有我没熟练掌握的知识点.



  • @DionysusF5 !59BC4Y11A)8N3XB}NVZJQOW.png 再问下这里为什么会选择用*10的方法?跟直接用1-400的for循环1样的吧,还是说有什么独到之处?



  • @疑似陆飞 我这里一个格子的宽高就是10。 每个格子的间距也是10,这里是为了计算生成位置。直接用一个1-400的循环不方便计算XY坐标。



  • @DionysusF5 我忽略了每个格子的高宽,以为直接是按地图的XY来的..现在明白了,这样挺方便的


登录后回复