Project1

标题: 排除BUG的经验分享 [打印本页]

作者: Zeldashu    时间: 2019-7-15 14:54
标题: 排除BUG的经验分享
本帖最后由 Zeldashu 于 2019-7-15 15:04 编辑

这个帖子是为了希望帮助到像我一样的萌新,能够更快捷有序的排除BUG,检查出问题所在。
同时如果大佬路过,也希望你们能够分享一下自身的经验。



个人做游戏的习惯是做一部分就测试一部分,大体上这部分没问题,才会进入下一部分的制作——此为背景。


一天,我和往常一样,完成了一个关卡的设计后进行Debug测试,果不其然,发现有bug,事件无法预期运行:

(原本构思这是一个马拉松关卡,图为终点,玩家一路逃跑到此处,然后发现被围困了。玩家需要推火炬到冰墙旁边,用高温将其融化才能逃出这里。)

出BUG的地方就是将火炬推到冰墙的判定问题上。

刚开始看,逻辑写法是完全没问题的,但基于自己是一名新手,或许自己还没有完全能理解MV的运作方式,所以还是把逻辑换了一个写法,结果还是如此。这样折磨了大概一个下午,最终发现了问题的所在——复制的时候没有把变量的“+”改为“=”

当时的心情那是一个草,终于找到问题所在后,自己松了一口气。看来逻辑方面完全没问题,问题是出在自己粗心大意。本以为既然找到问题所在了,那就先放松一下吧,第二天起来一看——X的,判断怎么还是有问题。

为了拟真,我构思的判定是“如果火炬在冰墙旁边一段时间后,它所在的冰墙位置会融化出一个缺口,如果这期间火炬被移动位置,那么它所提供的热量会降低,也就是说融化需要的时间会重新读条”。

问题就出在时间不会重新读条上

为了方便测试,我在旁边放置了一个红发小哥,如果“燃烧时间”变量归0,他就会变成红发,否则会变成妹子。

测试数次后,他都没有变成汉子,问题显然出在“变量不会归0”上。

再次检查逻辑,完成没有问题——如果火炬现在所在的区域不在上一秒所在的区域,那么“燃烧时间”变量归0。而符号问题又在昨天解决了,那么问题出在哪里呢?百思不得其解,又改了几次逻辑写法后,无果,开始排查其他事件

确实发现了几个可能影响到它运行的事件。这些事件和它一样是并行处理的,正常流程下在这个阶段是已经自动关闭了的,可是因为测试的缘故——我并非重新开始游戏按照正常流程来测试。所以它们没有被正常关闭,取而代之是继续运行。

关闭了这些事件后——X的,还是有BUG。

绝望的最后,再次查看了一下事件,又发现了一个问题——原来写漏了一个判断

(写漏哪个判断呢,这个你可以试着推测一下。完全是一个小疏漏,我却一直没意识到的问题)。

总结,为了更好的Debug,显然我们需要一个技术指导,或者说方针,这能让我们有序,高效的发现问题所在,而不是像无头苍蝇一样乱窜。

以上经验使我明白了必须拥有这么一套方法论,而我根据此经验总结出来以下方法:

“先看逻辑写法,再看标点符号,接着看看有没有写漏条件,最后排除其他事件可能带来的影响。”




这一句话的顺序不一定是最优的,也不一定是最好的Debug方法。不过如果你是一位和我一样的新手,不妨参考一下这句话,再结合自己的经验进行理解。

最后,祝你我的游戏永不出BUG……~



作者: zyzzyzzyzzyz    时间: 2019-7-17 18:23
我刚入rm的时候弄了一个开场白,结果因为没有搞独立开关卡了两个小时......
作者: BCJT    时间: 2019-7-17 21:11
单线程的BUG容易发现,这个只要保持思路清晰就能解决吧。
比较麻烦的是那种开放型的剧情,得考虑100种可能出现的情况。一些BUG得多次测试才可能发现。




欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1