[GMS2] SEALS OF THE BYGONE 中随机生成平台游戏关卡的方法


游戏体验的多样性是Roguelite游戏的支柱之一。算法生成的关卡,从平台游戏的角度来说,存在很多挑战,对于刚入手GMS的新手来说也比较复杂。比较折中的方式是将预制的关卡区块链接组合在一起,下面是我在Seals of the Bygone中制作随机关卡的方法,用到了GMS2的图层系统。

摘要

从本质上说,我们要为关卡创建一些不同的区块(section)。每个区块包含子区块(subsections),其中包含我们的资产(asset)。通过使用代码来动态切换子区块的开关(on/off),我们就可以随机关卡了。(译注:当然这不如dead cells那种算法加预制的随机方法效果好,不过对于刚入坑这里的朋友来说应该也是种不错的选择,而且在区块中来控制关卡设计,也相对纯算法容易一些,比如做risk of rain类型的游戏,应该是很够用了)
 


我们没有在代码或外部资源中存储关卡区块信息,而是在Room Editor中创建它们,并存储在图层中,就跟做其他关卡一样。这也是我创建这个系统的主要原因,我想保留现有的设计流程,该流程基于Room Editor。

配置

第1步:创建父区块

首先,我们要为每个主要结构创建空白资产层。区块的数量并没有限制,在下面的示例关卡里,我们创建了3个区块,名为"Section1","Section2","Section3"。这些资产层基本上就相当于结构文件夹,也可以在代码中引用。
 


第2步:创建子区块

现在,创建子区块的其他空白资产层。手机号拍卖这些图层将保存我们构成关卡的tile和object。这里我们将其命名为"Sub1_1","Sub1_2"等。

第3步:子区块的图层

最后,我们将构成关卡的tile、asset和object层也加入到这些子区块中。上图中,子区块"Sub2_1"是打开的,并存在"Collision2_1"和"Tiles2_1"这类图层。这些就是我们构建关卡要用到的层。


现在我们完成了所有设置,你可以切换父组的可见性,以便查看子区块的不同组合。我建议你在完成设计子区块后使用锁定功能,以确保不会意外的编辑它。

代码

我们已经搞定了关卡区块,并存储在不同的层中,现在可以来试试在关卡开始的时候随机选择哪些层了。在Room Start事件中敲下面的代码。
 


首先,我们定义要用于区块和子区块的前缀。我们将使用它们的名字来找到我们要用的层,请确保这些命名与你在Room Editor中的层相同。然后我们循环查看有多少不同的区块。
 


现在我们知道有多少区块了,遍历每个区块并查看有多少个子区块。然后选择一个随机的子区块来使用。
 


在决定使用哪个子区块之后,我们循环并销毁其他所有子区块(在该区块内)。最后我们通过设置层的可见性进行清理,以确保一切正确。如图,这里的图层名称是"硬编码"的,所以你需要将它们更改为你的区块包含的内容。我们可以动态的执行此操作,但这里没什么必要。



结论

完事儿了,很简单的解决方案,可以为你的关卡增添一些随机性。如果你想做一些更强大的东西,可以试试用layer_x和layer_y移动一些东西来扩展这个系统。

如果你有什么问题,可以随时联系我 rologfos

谢谢阅读!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值