Ikarus 发表于 2010-10-10 20:42:25

有关战役制作中bug的排查方法几则

前言:战役制作,出bug最痛苦。
   一开始还只是跳出,这还好,到后来各种稀奇古怪的bug,跳出已经完全成不了威胁了,尤其是一些逻辑上的问题,有关逻辑错误,本文无法探讨,因为毕竟每个人的逻辑都不一样,错误的可能也多种多样,我们只能具体情况具体分析。而这里我会给出几个我比较常用的排查bug的方法。


一、AoKTS检测是否会跳出。
这个可不是谁都会用,kk我还是扫盲一下。
使用AoKTS读取战役场景,点入“触发”一栏,你会看到每个触发之前都有打钩或者打叉。(如图)

这里有红叉的触发,就代表存在可能的问题,如:效果没有选中目标单位,或者效果尚未设定类型。这时候双击点开触发,有红叉的效果/条件也同理。


二、送出聊天检验目标触发是否生效。
有时并不可以确定需要的触发是否到位,可能因为没有被激活或者其他原因,它没有正常开启,而如果这个触发没有明确的外在表现形式(如:只是后台进行一些操作,并没有让玩家知道)这时候想要检测它是否正常运行就比较困难。
但是之哟给它附加上明显的效果表现出来,就可以确定了,比如送出一个:“24"(:|)


三、删掉相关触发,查看是否有其他触发与之关联。
有时候可能会需要激活一组相似的触发,如果不小心因为位置太近或者名称相似而点错,会引起不相干的触发莫名其妙被激活的情况。
但是想要找到是哪个其他触发激活了它,可能会是件大海捞针的事儿...但是确定了一定是有其他触发错误激活(当然,关闭也适用),只需删掉引发效果的触发,检查是否有新增的变红的触发即可(- -不要保存)(如图)

确定目标之后只需要重新读档案修改即可,这样确实省下不少麻烦,也减小了碰到不能触碰的触发的几率。


四、设置可随意激活目标触发,以检测错误效果的激活时间。
这点不太好理解,我不得不引入一个例子。
之前在做某场景时,要用到改变所有权,使单位从房屋卸载的效果,但是每次测试到那里都无法卸下任何单位。
很长时间都无法找到问题根源,初步怀疑是不正确的移除单位或改变所有权导致的,于是我开始适用这种方法。
设置一个触发,效果是点击一个方便的物件A,便进行所有权的改变,这样每隔一会便存档,点击一下物件A,看看是否有单位卸下。如果卸下了,就重新读档,继续游戏,直到点击A后,没有单位卸下,那么我们可以判断这个错误的效果就应该出现在某两个触发间了。(因为作为战役制作者,对于自己触发的开启时间应该还是有一定的了解。)
这点有点像数学中求0点的“二分法”,用测试的方法将错误点由范围为所有触发逼到某个时间段之间。(二分法有兴趣的同学下课可以查阅相关资料。)


五、面对逻辑问题,冷静分析。
逻辑问题并不是不可解,只是需要仔细的分析情况。下面我举得这个例子还是比较简单的,更复杂的就看各位自己了...

在中,士气系统让我蛋疼很久。这个效果是,不同的资源范围,可以在任务栏显示不同的数据。并且如果资源数值从某一区域上升或下降两级,本系统都可以直接忽略掉中间一级,不进行判断、显示中间级别字样。
但是有一个麻烦的事情出现,怎么会同时显示多种字样呢?(如图)

经过分析得出,多余的信息并不是因为错误激活文字信息,而是陈旧信息没有及时更新导致。
查看触发后我发现:系统虽然在资源值降低,更新信息前有激活消除旧信息的触发,但是并没有在资源值上升后,清楚旧信息,这也就导致了一旦资源值上升,旧信息就会保留,最后可以出现所有状态信息全部同时出现的情况...
所以我依据这个更新了触发,更正了这个问题。


总结:
以上方法都是旨在让错误触发/效果对外有比游戏中出现bug更直观的表现形式,抓住这个要点,想找到bug应该不难了。
我经常看到有人说,我做的战役被bug毁了,放弃了。我觉得这是非常不明智的,bug是人为的造成,人为地就有解决办法。不才抛砖引玉,希望各位以后遇到什么bug都照第5条去做,选择一条合适的办法排查错误,而绝对不是半途而废。我们要对自己的劳动负责。

[ 本帖最后由 帝国银之风¤ 于 2010-10-10 20:53 编辑 ]

Ikarus 发表于 2010-10-10 20:55:58

垃圾排版,真是我的风格

sd0061 发表于 2010-10-10 20:57:59

这样

Ikarus 发表于 2010-10-10 21:00:13

原帖由 sd0061 于 2010-10-10 20:57 发表 https://www.hawkaoe.net/bbs/images/common/back.gif
这样
这是。。。

adongct 发表于 2010-10-10 21:48:55

要是1小时后开始卡,2小时3小时......越来越卡.那个怎办....第一种检察通过的。

Ikarus 发表于 2010-10-10 21:51:27

原帖由 adongct 于 2010-10-10 21:48 发表 https://www.hawkaoe.net/bbs/images/common/back.gif
要是1小时后开始卡,2小时3小时......越来越卡.那个怎办....第一种检察通过的。
= =。。。这个多半是某个地方单位在不停产生。。。

adongct 发表于 2010-10-10 22:10:51

流水.一次生产4条船.......................生产出来都移走了.

Ikarus 发表于 2010-10-10 22:19:42

很可能没移除掉哦,选玩家了?

adongct 发表于 2010-10-10 22:37:27

我生产的是渔船,要是移不了那就是要跑出256来捉鱼了。
........不知道会不会是我的电脑老爷了。
这个跟单位数量有关系没(30多W)。

Ikarus 发表于 2010-10-10 22:47:27

……有点……多……我阿金库尔……1w而已……

adongct 发表于 2010-10-10 22:51:29

完了,还在增加中........自旧月那事后,我现在得动用大量256{35}

Ikarus 发表于 2010-10-11 06:11:26

需要时在10s内产生256以上,不用时移除即可

sadam667 发表于 2010-10-11 12:01:36

我来给你加精。。。。。。。。。{9} {9}

怎么感觉不对味啊这话。。。。{35}

老胡V1 发表于 2010-10-11 12:40:31

我表示很惭愧,让密铺帝失望了…555555。单位多未必卡,新信长同样三四十万可是也不卡,大概是同时运行触发太多了或者当前屏幕显示太多单位。

尼克 发表于 2010-10-11 15:05:18

原帖由 帝国银之风¤ 于 2010-10-11 06:11 发表 https://www.hawkaoe.net/bbs/images/common/back.gif
需要时在10s内产生256以上,不用时移除即可
什麼意思,為啥要10s,1s就可以了啊

Ikarus 发表于 2010-10-11 19:15:42

原帖由 尼克 于 2010-10-11 15:05 发表 https://www.hawkaoe.net/bbs/images/common/back.gif

什麼意思,為啥要10s,1s就可以了啊
做起来麻烦不是么,复制那么多次……

Ru43 发表于 2010-10-11 19:25:18

习惯问题:{40}
1、所有触发都要在一段落结束后人工关闭。除非是战役进程必定触发执行的例外。
2、设计上建议按模块设计,按模块测试。写500行开始查错和写100行查错难度差很大。{6}

原帖由 老胡V1 于 2010-10-11 12:40 发表 https://www.hawkaoe.net/bbs/images/common/back.gif
我表示很惭愧,让密铺帝失望了…555555。单位多未必卡,新信长同样三四十万可是也不卡,大概是同时运行触发太多了或者当前屏幕显示太多单位。
感觉是太多单位在计算路径也会卡。举个例子说同人口Attacknow、同人口TSR、同人口RD明显最后一个卡。。。。。。
又比如你修墙堵住电脑后往往会卡。
卡的表现里面典型的就是一走一顿,常常玩家的士兵行走自如AI的士兵举步维艰。比如说碎玉的最后一战,可发现40名日武在小城里因为道路窄寻路难围不住玩家的一个骑兵。

[ 本帖最后由 Ru43 于 2010-10-11 19:32 编辑 ]

Ikarus 发表于 2010-10-11 19:29:30

是的,设计过程中分清段落也比较实际。

yi落后 发表于 2010-10-11 19:37:50

如果是超级难解决的BUG的话,排除法……删掉一堆,测试,再删一堆,测试……


P.S.KK这个士气完全是照着中2做的啊,连字都没改……

Ikarus 发表于 2010-10-11 19:57:59

原帖由 yi落后 于 2010-10-11 19:37 发表 https://www.hawkaoe.net/bbs/images/common/back.gif
如果是超级难解决的BUG的话,排除法……删掉一堆,测试,再删一堆,测试……


P.S.KK这个士气完全是照着中2做的啊,连字都没改……
改了!第一级是士气高昂……
你说的删除测试的方法不太好,属于比较鲁莽的地毯轰炸,效率比较低
页: [1] 2
查看完整版本: 有关战役制作中bug的排查方法几则