bug教程第一讲:最基本的路径bug(自动驾驶)
2019/07/20320 浏览综合
路径bug是什么呢?其实这从专业的角度来说不叫bug了,而是叫"特性"了!专业名词叫"自动驾驶"。
具体可以看到小黄在某些特殊情况下能自己走过一些平常不能走过的地形,例如上斜坡落斜坡,甚至能爬上一格高的方块,推发动机之类的,其实这种实现方式可以通过自动驾驶来实现的。
在讲自动驾驶之前,就不得不简单说一下路径生成原理。所谓"路径",是在点击空白(圆圈)的时候已经生成好了。并不是走一格然后生成一格这种方式。
这可谓是程序设计的时候,理论上有两种合理的实现方式:第一种是直接保留终点坐标,小黄每走一次或者每隔一段时间自动刷新路径。这样设计比较符合我们现实生活中的寻路认知。但很明显游戏设计者并不是这样实现的!估计是这样设计程序开销比较大,而且动态更新寻路或许会引发更多的其它bug。
那第二种就是静态寻路方式,就是上两段所说的在点击路径终点的时候已经生成好了,程序会保留一个方向队列,小黄走的时候按照这个预先生成好方向队列走就行了,这样在设计层面上面也比较省事。关键是路径生成机制就是用这种方式的!
形象一点就是某s从A点到B点,但某s眼睛瞎了看不到路,那怎么办呢?一个最简单的方法就是预先把A点到B点的路径一步一步详细告诉给某s,例如什么时候转弯,什么时候上楼,什么时候停下表示已经到达目的地都和某s说了,某s根据这方向走就是了,至于具体他的行为机制,例如小黄读取方向队列的具体流程,那就属于高级bug原理范畴了,这个以后有机会再说(很重要!但不在这里细说,现在只知道小黄的路径生成机制就可以了,行为机制以后还要再详细说明的)。
刚刚那个这比喻似乎说小黄是"瞎子"。但这样的确比较形象。那问题来了——如果生成路径后小黄遇到障碍物那会怎么样呢?答案当然还是从路径生成原理出发!小黄会照着方向队列走,中途遇到东西照样会前进,就算平时不能走的地形小黄也要扛过去,遇到一格高的障碍物也可以爬升,遇到重力金属块也可以推动。甚至前方是"悬崖"小黄也会"义无反顾"地跳下去!
还有说明一点的就是,当小黄走的路径偏离大于水平方向3格范围时,小黄会进入"假跑"状态(这个和小黄的行为机制有关,以后再说),当偏离水平方向小于等于3格的时候,小黄会自动修复当前路径,使其和方向队列尽可能保持在同一"垂线"上。
说了那么多,到底"自动驾驶"还是属于功能性bug,功能性bug实现需要载体。那常用的激活方法有哪些呢?还是先说说激活条件吧。常见的自动驾驶就是预定路径和实际路径存在"垂直高度差"!
这不难想到,最常见能产生垂直高度差的方法就是通过垂直滑块!最常见就是在运动状态中的小黄在滑块上拉高(拉低)滑块,使其垂直路径发生变化从而让小黄走的路径偏离于"实际路径"。
下图就是自动驾驶bug的简单实现。

当然上图的自动驾驶只是体现出一小部分,至于自动驾驶的其它路径设计就有兴趣就交给感兴趣读者们自行尝试了,毕竟自己动手过修改过的图才会印象深刻的,以后的bug教程也可能只实现最基本的核心内容。
还有一点特别重要:垂直滑块并不是激活自动驾驶的唯一方法!以后看到后面回过头来还可以用多种方法得到自动驾驶的效果。关键,还是要理解原理,从原理入手,操作性bug大都不是魔法玄学,理解就行了。
课后小练笔:自制一个简单的带bug关卡,作者路线必须要用到自动驾驶!
附加:
1:尽量多找一些涉及到自动驾驶的玩家图并自行体会一下走各种"不寻常路"的小黄。
2:仔细观察小黄,当目标路径分别在小黄的下方和小黄的上方的时候小黄的行为状态有什么不同?(涉及到行为机制)