随着游戏开发的深入,越来越多的BUG逐渐浮出水面,如果拥有一套好的日志输出和调试机制,抓虫子的效率会高很多。
1、使用第三方的打印输出
As3本身提供了一个trace方法用于打印输出,类似于printf,不过这个输出只能在调试情况下才能看到输出,而实际游戏运行的时候情况多种多样,这个限制太大了,所以我们希望有更好的输出方式。
这里介绍2个第三方的,这些外部库的使用非常简单,没有调试的限制,无论是在本地Flash Player中还是浏览器插件中都能正常输出:
1)Alcon:
2)MonsterDebugger:
2、在游戏中做一个控制台输出窗口
除了使用第三方的打印输出外,另外一个靠谱的方法是在游戏中自己做一个控制台窗口。这个实现非常的简单,以下:
1)使用Flash CS3画一个界面,里面有一个msgTxt:TextField元件,当然也可以自己直接new。
2)在项目中新建一个包装类,叫Debug、Log等等都行,提供一个print静态方法,function print(...args),参数可以和trace一样让用户自己指定个数,再把每个参数加起来toString()。
3)建议在Log类中加上一个静态变量enabled:Boolean,作为开发版和发行版之间的开关。也可以使用条件编译的方式彻底的在发行版中禁止打印,关于条件编译:
3、动态开关
动态开关的意思,是指在游戏的运行过程中可以随时开启和关闭某个功能而不影响其他功能模块。这样做的好处很多:
1)性能分析。在某个你认为是性能瓶颈的地方加上开关,然后在运行过程中打开和关闭这段代码,再查看性能情况。
2)禁掉暂时不用的功能,这个功能以后可能还会用到。策划的需求千变万化,而我们要以不变应万变,他们说某个功能不需要的时候,千万不要直接就把那个功能的代码给删掉了,或许SVN有历史记录,但我想这个找回的过程也是会非常痛苦的,所以加个开关吧!
3)动态运行某些需要在特定情况下才会运行到的代码。这个情况是指,比如一个物品强化的冷却时间是5分钟,那我现在不想改配置表,怕改完就记得了,那就动态的改变这个值好了,直接设置为1分钟或者更短。
4、可视化的状态分析
事实上光有打印有很多问题比较难以被发现。
比如要做一个战斗系统,战斗中有大量的怪物,数量有200-300,这个时候打印输出的效果非常小,很难帮我找到问题,反而因为怪物的数量多,导致打印大量的垃圾日志。这时候我就希望有一个可视化的界面,可以一眼就看出哪个怪物处于什么样的状态,血量是多少,攻击力多少等一系列的属性。
可行的做法是在真实的战场外再建立一个虚拟的战场,而这个虚拟的战场的所有数据都来源于真实战场,并且每一帧都会实事更新,而虚拟战场要做的事情就是画出当前战场的状态。
具体怎么画其实有很多种方式,比如把一个怪当成一个小红点,把BOSS当成一个大红点。当鼠标移到红点上的时候,可以一眼就看到这个怪的所有的属性。
5、动态运行代码
这条和第3条略有重复,不过动态运行代码却可以做更多的事情,不再局限于单独的改动几个变量,可以任意的做你想做的事情,总之就是一个爽!
关于Eval:
6、待补充