如果你也喜欢rogue like,喜欢研究随机生成地图的算法,可以看一下Eagle Island 的开发者分享的这篇文章:渐进式地图设计思路。
如果你也喜欢rogue like,喜欢研究随机生成地图的算法,可以看一下Eagle Island 的开发者分享的这篇文章:
渐进式地图设计思路。
The theory behind beautiful procedural 2D worlds
Eagle Island的世界地图类似Metroidvania,由很多随机生成的小地图(也称为房间)组成。这个游戏是一个横版的2d平台跳跃类游戏,所以本文主要介绍基于瓦片(tile)的小地图的生成方式。
第一步,生成初始房间
根据房间在大地图里的位置,留出入口和出口,然后在剩余位置填充边框。注意房间的尺寸可以任意尺寸,这样会比较自然。
第二步,从角落开始填充凹型块(concave fillers)
如图,角落里填充的块就是凹进去的形状。注意不要覆盖出入口。
第三步,填充凸型块(convex fillers)
如下图中粉色块就是凸型块。
注意,尽量用算法而不是预先设计好的模板来生成这样的凸型块,不然玩家很容易发现重复的地形。
第四步,填充悬浮块(floating fillers)
如图中绿色块。
这些块可以与之前填充好的块重叠,这样可以随机出各种形状的地形。
第五步,测试路线。
现在可以测试这个房间是否拥有一条完整的通线,如下图的白线就是从入口到出口的一条通道。
如果不存在完整的通线,可以考虑挖一条出来,或者重复之前的步骤重新生成一个房间。
第六步,测试路线的可行性。
有通路不代表就可以走。
下图中,左边的平台只能从左侧跳上去,不过不影响。而右边的平台就有问题了,玩家没法跳上去。
第七步,修复路线
下图中,青色块就是升起的地面,这样玩家就可以跳到刚刚没法跳上去的平台了。
哒哒,完成!
最后,填充图片,这样一个房间就完成了。
对比一下,下图中的各个色块就是之前算法中各步骤中生成的。
注:我并没有确认,他们是用这个算法在游戏中动态生成地图,还是基于这个算法设计了一个工具给关卡设计师用。不过,并不影响学习哈。
欢迎关注我的公众号:阿斌的日常,一起开心做游戏。
不错,我研究下怎么通过程序生成
@MrUp:随机生成的地形终究没法跟人工精巧设计的地形相比,只能说是一种关卡设计思路。不过,作为程序员,我还是蛮喜欢各种随机地形的思路。
@水瓶座阿斌:随机生成地图使用更复杂的算法雕琢某片区域一定程度可以提高关卡的精致程度,目前正在研究这一块的实现
@eastecho:思考了一下没有特别好的思路,如果有研究成果了请务必分享给大家,谢谢!
我也关注了这个游戏,让我想起了假面忍者花丸,没想到还能这么设计。不过算法生成的地形总觉得缺了点设计感,样子是有,但个人觉得玩家不会因为这些随机生成的地形感到乐趣,尤其是对于Metroidvania这种极度依靠关卡设计的游戏类型来说。
另外这个游戏在ks上的众筹貌似要跪_(:3」∠)_