前言:这是我博客园的处女作,也是我第一次项目的一次回忆与总结。

     接触Vega引擎快一年了,今天来总结一下自己学习和开发的经验,也顺便复习一次。

     最开始接触Vega是因为要做一个项目。刚开始的时候,感觉很难,因为学习资料非常少,相信接触过的人都会有同感,但也有一些入门经典,比如:Vega 100例、86vr论坛精华。记得那时只学了一个星期就开始真正做项目了,遇到很多问题都要自己解决,比如:Vega的碰撞检测具体是怎么实现的、屏幕坐标转换为三维坐标、刷新频率太慢等等。借助Vega自带的帮助文档,啃着平时能避就避的英语,每天熬到12点多才回到宿舍,大多问题都迎刃而解了,剩下那些实在没法解决的就绕个弯,比如屏幕坐标转换为三维坐标这个问题,Vega有个自带的函数screentoworld,但函数的参数中有一个怎么都搞不明白,后来用dopick这个函数把坐标转换功能做出来了。当然现在有更新的Vega prime。很多功能在Vega里很难实现的都可以在Vega prime直接调用api就搞定了。Vega prime还有一个好处是跟C++对口,用的是面向对象,而且api的功能也更强大了。

     这个项目是在dos下做的,做起来相对轻松一点,架构什么的也不用太复杂,不过我们学习ms,用消息驱动机制。一开始不是用消息驱动的方式来做的,而这个项目一共用到二十多台电脑,要保持所有电脑的同步,给我们带来了很大的困难。经过讨论,我们决定用消息驱动机制,同时也带来了新的问题:怎么保证消息的同步,接着又在网络通信方面搞了一段时间才把这个问题解决了。在接下来的维护工作中,出现了一个很严重的问题:我们的项目里有一个涨水的交互功能,可是不知为什么总是经常有些机子不涨水,更麻烦的是:在实验室完全没问题,到了现场就老是出问题。于是,我们采用写日志的方式跟踪调查,经过细心的观察发现不涨水不仅是表面上不涨水,其实是程序卡死了,因为每次不涨水的时候日志都是空白的,这说明程序是非正常退出的!非常令人惊讶的发现!不过还好,知道原因了总比盲目的找来的好,于是乎,我又对程序进行优化,可是依旧不涨水。既然程序优化没效果,说明不应该只是这个程序本身的问题,相比较实验室与现场的运行环境,不同的是实验室里涨水的时候没有传感器。这也说明不涨水和传感器有关,接着就对传感器做优化,但结果依旧是没用。又经过一段时间的观察,发现只要水涨起来,程序就不会死掉,这也就说明程序卡死是在涨水过程中,接下来,我将涨水过程中的一切消息都屏蔽了,问题也就跟着解决了。其真正原因是:dopick调用太频繁造成的。

   第一次做大项目,吃了很多苦,试过三天三夜没睡过觉,但觉得值。从这个项目中,让我再次体会到细节决定成败这个道理。做程序员也好,生活也好,往往一个细节就能把你搞得半死不活的。

posted on 2010-08-21 01:36  jack_zjz  阅读(1160)  评论(1编辑  收藏  举报