磨剑

云风 1999.4.12

最近从留言版上, sina 论坛上看到了不少朋友对我的评价是太注重游戏中底层的东西, (潜台词是说不注意游戏设计本身?) 而我自己对自己的评价正好相反. 我讨厌在游戏的图形,声音等处理上面翻来覆去. 而且以前我一直的论调一直是反对 总是围绕诸如 DirectX 的用法, 写游戏用 DOS 还是 Win9x, 是用 256 色, 还是 16bit 好等问题.

我想, 也许是我这两个月来开发风魂游戏程序库给大家树立了一个斤斤计较速度内存的形象, 实际上我在写这个时候, 无时不刻的痛苦, 很希望能早日完工, 只在速度有了新的提高, 或阶段性的完成时才兴奋一会. 唯一能解释我现在做法的理由是, 我需要一把好剑.

不断的优化底层库, 就是磨剑的过程, 也许最终剑没有名家如 M$ 打造的那么锋利, 但对于我, 却绝对乘手. 一件乘手的武器, 将让我在今后的江湖中无往不胜. 更何况, 我在尽我的能力去将它变的无坚不摧. 而当风魂完成的时候, 我想再也不会碰 DirectDraw, DirectSound 和 DirectInput 了.

这两天我一直在优化(或者直接说重写)风魂的大部分代码. 起因是在 sina 论坛里 game_hope 网友的一句话, 让我发现 RLE Sprite 的结构有不合理的地方, 导致了我作出了痛苦的决定 -- 重写 RLE Sprite 的相关代码. 其实经过一个多月的 ASM 编码, 内在功力上升不少, 早就有重头来的想法却狠不下心, 是这个导火索, 触动了我的那根神经. 当时为了破釜沉舟, 浏览了最后一遍代码, 点了一下, 大约 2000 多行, 然后全部删掉, 并且将硬盘上的备份一并拿掉. 没有这个气魄, 日后怎么才能立足江湖? 抱着这个信念我开始了痛苦的例程.

最难忘前天晚上,写 RLE Sprite 剪裁的程序, 最终短短100 多行的代码, 我整整花去了一个通宵. 新的 RLE 结构做剪裁要比以前的复杂些, 即使是以前的同样的 代码我也花去了不少时间. 这次由于又加上有些焦躁, 反复调试, 都没有通过, 后来干脆重写, 就这样一次又一次的删掉重来, 中间上各个论坛到处灌水以缓和心情, 这个时候收到了 T&P(tapu@371.net) 网友的来信,讨论我的 Alpha 混合算法的改进. 当我确认新的算法可行且能进一步提高速度的时候, 却没有一点点喜悦. 面对一大堆的曾经完成的代码重写, 想到按我的性格这 Alpha 混合 的部分也将全面推翻, 那种前路漫漫的无助的感觉没有经历过的人真是无法理解.

当然最终问题都解决了, 代码中能改进的地方都改了, 测试表明, RLE 的控制提高了 18% 的速度, Alpha 混合提高了 9%, 真是没有辜负我整整一个周末的劳动, 终于可以会到寝室安心的躺下了 ^_^ 现在想想, 如果下次再需要为了一点速度的提升, 我还会有魄力全部重来一次吗?

现在, 整个优化工程还有小部分就可以完成, 胡乱记下这两天的感受, 留做回忆