橙光游戏吧 关注:278,624贴子:3,355,919

【教程】技术小指导——排错【1】

只看楼主收藏回复

技术拓展教程等我有空了就会持续更新。因为最近没空,只能做点KRKR的研究。
但是在研究过程中经常会遇到一大堆【BUG】,改起来非常的麻烦。以此我总结出了一些做游戏的时候排错的好方法,各位可以借鉴。如果你还有什么比我更好的方法 也可以和我进行一下交流_(:з」∠)_
此排错教程并不只更新一次 因为方法较多,我不会一口气全都写完 这次就写一点好了_(:з」∠)_
====================================================================================
1 BUG到底是啥
说到排BUG 我们当然就得谈谈BUG到底是什么。
在一般看来 程序中说BUG 都是程序错误的意思。这是个很好的解释。因为只要程序不合自己意图都能叫程序错误。
嗯 那么程序错误也就是出BUG也是分好几种的 一般以下几种情况:
1 崩溃 卡机等严重错误
这类错误的典型的特点就是【程序弹出报错提示框 并且游戏完全无法进行。】
好一点的情况是游戏无法进行 崩掉 最恶劣的情况是让电脑死机= =这个在橙光中也有出现过【比如我_(:з」∠)_ 】
这类情况一般分两种问题 程序问题和引擎内部问题。
这种BUG的例子有:【随机数设定反】【索引用数值中的值小于0】等。
2 效果不好
这个特点就是【一个程序的效果没有达到作者的要求 但是游戏能正常运行】。
这类BUG解决起来相对于第一种来说更简单解决。因为【游戏能正常运行 只不过自己设计的程序没有达到自己的效果而已】。而不是写入了【电脑不允许的程序】。所以在这类程序上改动 改动后的程序通常都是受到程序允许的。
这类BUG有:【立绘淡入后不淡出】【转场效果效果不好】等。
3 无法解决的BUG
这类BUG可能是【引擎本身的缺陷问题】 比如高级UI跳转到主程序就有一堆这种BUG= =
这类BUG的例子:【高级UI跳转到主程序后的素材闪烁问题】【无限循环不加等待卡死】等。
这些都是BUG的各种类别 在进行排错之前要了解。
===============================================================================
2 排错指导
以上三种我阐述的BUG 第三种是无法解决的【仅限于橙光引擎】 第一和第二种都能解决。
而且解决这些BUG的方法有很多种 我在这里一一说明。各位可以看自己的情况使用合适的排错方法。
排错方法1:逐渐移除
这个方法我不常用 不过貌似是一个很不错的方法= =意思就是你新开一个剧情 起名为【排错用工程】,
然后将一小部分你认为可能出错的程序移动到这个排错用工程中,然后测试原本程序。
【如果测试后BUG解除 那么说明BUG就在你那个排错用工程的一小部分程序中 主要集中排错这一小部分程序】
【如果测试失败 那么说明BUG可能在你排错工程的一小部分程序中 也有可能不在 继续重复将程序移到
排错用工程中】
这样的好处就是一旦你测试成功 错误一定就在排错用工程中。但是缺点就是你并不知道这一大段
程序中到底有多少个BUG错误= =当你将程序修复好后你就可以将这一小部分【有可能是一大部分- -】程序
重新塞入主程序的之前位置中,然后进行测试。
【如果测试成功 那么恭喜你BUG修复成功】
【如果测试失败 有可能你刚才的解决BUG操作并没有解决一个BUG 也有可能你解决了一个或一个以上
的BUG 但是还没有解决所有BUG】
这样搞下来 应该来回测试个几次 BUG就能解决了。
但是这个方法并不是所有BUG都适用的= =你如果一个淡入淡出做失败完全可以直接在主程序上改嗯_(:з」∠)_
排错方法2 推理法
这个方法需要脑力嗯_(:з」∠)_ 是直接在源程序上改的方法 通过推理找到BUG
但一般没多少小伙伴喜欢用这个方法因为太费脑力了嗯 这个方法在不同的BUG中有不同的思路 我写一个例子嗯,其实就是我最近在KRKR测试的一个载入对话框的宏 但是出现了菜单按钮无法显示的BUG。我是这样
解决的:
首先,查看position指令属性是否为visible=true 查看结果为true。联想到是不是大的范围没有true
然后,将layopt指令中的属性visible改为true,测试还是无法显示,说明不是visible的问题。
然后,因为不是visible的问题 那么到底是啥问题?使用【逐渐移除】的方法,将载入对话框这个
macro移动到排错用工程中,进行测试后发现能显示。那说明是什么问题?
推理出:【 因为排错用工程之前没有写任何程序 所以此错误是前面的程序影响造成的。】
然后我检查了一下前面的工程 并没有任何问题。随后又陷入死局:到底是啥BUG?
陷入死局后上网搜索 发现sysbutton有kag.fore/back这一说 联想到【sysbutton也要用current指令指定
到底载入到表层还是里层】
随后复制一个sysbutton指令 用current将sysbutton载入进message0中的表层和里层 测试后成功。
这就是一个推理法解决BUG的过程 当然解决过程中很可能遇到死局 这个时候就需要大胆猜想并且上网
搜寻才能找到突破口嗯_(:з」∠)_
当然还有许多推理法的例子 我会在楼中继续讲解几个 这里就不多讲解了貌似字数很多了_(:з」∠)_
排错方法3 情况查询法
这个方法适用于简单BUG 是从BUG后的画面效果直接查出BUG。
用这个方法比较好的就是 一个人不管怎么插入立绘都无法显示立绘 请问这个BUG怎么解决?
按照高级模式的常识即可知 有可能是高层盖住了底层。然后即可用高级模式查询高层中是否有可以覆盖
背景的一些图片。找到后吧这个图片对应的image指令灭了就可以了。
当然这需要排错者有足够的程序功底才可以_(:з」∠)_ 不然就只能用第二种方法了
还有没写完的 我先发布在这里 没写完的后面会跟回复继续写嗯 如果要看的爽的话就点【只看楼主】就可以了嗯_(:з」∠)_


IP属地:上海1楼2015-02-06 20:35回复
    前排暖


    IP属地:广东2楼2015-02-06 20:36
    回复


      IP属地:贵州来自Android客户端3楼2015-02-06 21:01
      回复
        这么长楼楼也是蛮拼的厚QAQ


        IP属地:贵州来自Android客户端4楼2015-02-06 21:01
        收起回复
          what???!!!


          IP属地:贵州来自Android客户端5楼2015-02-06 21:05
          收起回复
            吧主求勾搭【抱大腿】QAQ


            IP属地:贵州来自Android客户端6楼2015-02-06 21:05
            收起回复
              ccccccccc


              7楼2015-02-06 21:11
              收起回复


                来自Android客户端10楼2015-02-06 21:17
                回复
                  是因为我太善良可爱机智聪明勇敢才被@的吗


                  12楼2015-02-06 21:27
                  收起回复
                    还没有被触触艾特之前我就理智地水了帖


                    来自Android客户端13楼2015-02-06 21:29
                    收起回复
                      我来报道啦!!!


                      14楼2015-02-06 21:30
                      收起回复
                        来惹来惹
                        窝居然会被艾特好鸡冻ヽ(✿゚▽゚)ノ


                        15楼2015-02-06 21:44
                        回复
                          口怕orz


                          18楼2015-02-06 23:13
                          回复
                            被艾特好激动(o゜▽゜)o☆


                            20楼2015-02-07 09:08
                            回复