《BUG》开发者日志:编译原理(第二版)

10/1465 浏览综合
大家好,我是星仁,这是游戏开发的第三天。相比于前天的进度,这次试玩demo整体有了非常大的突破,并且已经上线游戏主页。【点击模块再点击槽位配置技能,使用Q键发射子弹】
skill> 本次的demo中,你将可以实现更多的子弹玩法配置,包括子弹分裂、子弹旋转和自由的子弹属性。
art> 本次demo对于地图生成和美术效果进行了总体的重构,你将可以在风格更加统一的界面中体验到光怪陆离的像素世界。
下面,我将以此次试玩Demo为基础,详细讲解整个类noita游戏的技能编译算法原理!(敲黑板)
[心动小镇_震惊][心动小镇_震惊][心动小镇_震惊][心动小镇_震惊][心动小镇_震惊][心动小镇_震惊][心动小镇_震惊][心动小镇_震惊][心动小镇_震惊][心动小镇_震惊][心动小镇_震惊][心动小镇_震惊]
首先,技能编译的可行性来源于有限状态机。这种状态机包含了一些“节点”,和一些连接节点的“路径”,此时每个节点都代表一种状态。例如:节点1——节点2,就是一种两个节点的状态机。而游戏中使用的有限状态机,在此基础上规定了路径的“过路费”:当走过一段路径时,路径附带的效果就会附加到最初的效果之上。如:
试玩demo中的弯曲子弹。当你输入了attack = 1时,首先产生的是一个向量(3,0),子弹将会直线朝右侧发射,此时子弹从初始节点走到了条件为attack = 1的路径,获得了这个向量,并且达到了另外某个节点。随后,当你继续输入0 1 0,系统检测到了你的输入之中包含特征“1 0 1 0”,你的状态又从这个节点走上了条件为这个特征的路径,并达到了另外一个节点。而路径的附带效果就是:你的子弹将会旋转四分之一圆弧。所以,当你输入“attack = 1 0 1 0”时,你就完成了一个弯曲子弹的编程。
同理,当你继续输入0 0时,你的子弹将会检测到“0 0 0”的条件,走到附带效果为分裂一次子弹的道路,并且分裂的优先级高于旋转,所以会直接插入到旋转的前边,影响后续编译,从而编程出最终效果为两个向上旋转四分之一圆弧的子弹。而你继续输入1 1 1,你的子弹又将编译出变成毒弹的效果。而这就是类noita的核心算法:通过语法、状态机构建、路径效果设计而实现任意输入的编辑,无论你输入什么,你的状态仍然位于状态机内,你走过的路径也是确切存在的,而对于你来说,某些错误的输入就可能会导致一些技能效果的“BUG”![TapFamily庆生-万物皆可联动_服不服]恭喜你,知识以一种奇怪的方式进入了你的脑子。
本次试玩Demo中,你可以去测试技能了。游戏中将会随机刷新一批移动缓慢的可爱的史莱姆,他们不会攻击你,你可以用编辑出的技能去把他们打跑。你甚至可以把史莱姆当成足球来踢(确信)。欢迎大家下载体验,基础语法可以参考目前的实机视频和截图进行探索!#聚光灯gamejam开发者日志 #TapTap聚光灯独立游戏
TapTap
TapTap
TapTap
10
13