工作日志3(2006.9.4--9.15)

/***************************************************************************************
****************************************************************************************
**   File: Nothing for all
**   Desc: no description
**
****************************************************************************************/
2006.9.4
    开学了。没什么值得我开心的,相反,要浪费相当多的时间在那些无聊的课程上,这才真让我讨厌!
    早上7点过就被叫醒,第一节课就是概率与统计,我上的那个恍惚啊,真仿佛肉体与灵魂分离了一样。3-5节是离散数学,我靠他的又是一门感觉学过的课程---我一看到里面那些东西,图论都有了,跟个数据结构课程似的,前面的章节更象是PDL语言![em]e19[/em]然后我上了一节课,决定去把学费教了,然后顺便把剩下的课逃了。
    关于学费,挖靠,就那么一刷,6000人民币就飞了,然后我买了一年的罪受。这破学校,这些破人,这些破老师,这些破课程---说起人,我真是看不惯有些就他妈懂点进制转换就到处给人讲授(那些问问题的也足够傻B,感觉连计算机是什么东西都不知道~)炫耀不止的人!你也不去看看,那些计算机牛人是怎么学东西的?---你说你要会个FrontPage, FireWorks,Flash,会做个网页之类,你都好意思去炫耀?我说你连说自己是计算机专业的大学生的资格都没有!P:你要把一个高手惹急了,1年时间给你弄个FrontPage完全有可能!我说,低调点吧,就这个破学校牛的人都比你多的哪去!
    下午上电子电路什么的,学院院长教。开始听他那个年代的编程生活,倒还真是有点佩服他。结果,后来我发现这糟老头就是个不知道再学习的老顽固!你下个围棋,把一个下棋程序弄迷糊了你就觉得人工智能不行了?还有别把你那用于一个程序的观点放在所有程序之上!我要再写个程序给你,它的行为还会一样? [em]e19[/em]无敌!
    ------------------------点到即止-----------------------------
    晚上继续看调度器代码,还是不怎么明白,virtual time and real time 有点过于复杂了。我曾经把调度器的问题放到Gameres 上,结果N久都没人甩我。前段时间又放到GameDev上,我想外国人确实比中国人要强一点点---我是说游戏产业----而且要乐于助人一点点---去过外国技术论坛的国人都知道这一点没有说谎。帖子贴出不久,还真有人马上给我回贴了。结果他给我讲了一大堆virtual function的用法[em]e19[/em],后来我继续阐明自己的疑惑所在,然后到现在2天了还是没人回答。在这之前我还在MSN上问一老外,他一听我要问问题了,就先下伏笔说自己也是个Beginner---32岁的Beginner---后来他就说,哎,我都说了,我beginner呢!更[em]e19[/em]。
    总结起来,那篇关于调度器的”精粹“论文仿佛就作者一人知道! 鄙人愚钝,还真要等高手来指教了。

2006.9.6
    今天终于把GUI库酝踉完成。基本上我是模仿着HGE来设计的:一个GUI_Manager,然后定义一个抽象基类,再由此基类派生出各种具体的控件类。在底层图形库,我会设计一个Graphics_Sys抽象基类,然后利用抽象工厂模式来创建一个instance给高层GUI使用,于是在低层我就可以使用HGE或者DX8。
    然后我看了下HGE的GUI原代码,四个文件:hgegui.h, hgegui.cpp,hgeguictrl.h,hgeguictrl.cpp。我总共用了2个小时来阅读这几个文件。总体而言,难度不大,都能看懂。当我正在暗暗嘲笑这个GUI库的简陋时,“中国HGE群”里的一个老大给了我他最近写的一分DEMO代码(主要前段时间我把Feeding Frenzy的代码给了他)。这分代码里面自己实现了几个GUI控件,都派生于hgeGUIObject类。
    于是我突然间意识到:HGE的GUI虽然简单,但是扩展性却很好!
    这所有的扩展性归功于hgeGUIObject这个基类的良好设计。但是,作者Haaf是如何来设计这个类的呢?他怎么知道那样设计会让其扩展性很好呢?我再次阅读那十几行类定义。对了,作者观察了所有GUI控件,然后从中找到了这些控件的共同特征----处理键盘和鼠标的输入!
    跟群里的几个老大谈了谈,然后Randy给了我一份HGE的扩展库,一个更为完善的GUI!然后我惊叹了:这个库基本上提供了所有的GUI控件!---输入框,三状态按钮,滑动条,ListCtrl,甚至还有可移动的对话框!
    郁闷了!我不用去自行设计一套GUI了,也不用再去扩展HGE了。那可以作为练习,但是没有多少意义!
    接下来要做:做一两个HGE扩展GUI控件作为练习,阅读Randy给的那一套GUI库代码!---设计一套GUI库的事情,以后再说!

21:00
    虽然HGE引擎的GUI很简单,但是其扩展性很好。因为hgeGUI::Update基本上派发了所有控件需要的消息---键盘操作,以及鼠标操作;而hgeGUIObject基类的很多成员函数都会处理这些消息,我们只需要派生hgeGUIObject,然后重载我们需要的消息处理即可。

2006.9.7
    LineEdit实在不好写啊。可能我有点浮躁了,写起来乱糟糟的。最终我决定只是把它胡乱写起,然后开始阅读那个基于HGE的GUI库代码。
    现在我发觉,HGE的GUI其实很遵循《使用C++和Directx开发游戏GUI》这篇文章讲述的。关于那个消息派发,正是利用虚函数机制,然后派生类,也就是具体的控件类,需要处理什么消息,就重载对应的虚函数。--看来这种GUI的设计已经成为业界的一种规范。
    另外,我稍微看了下那分完整的GUI库代码,发现它更是遵循《使用C++和Directx开发游戏GUI》的规范:父窗口子窗口机制全有了!
18:52
    基本的LineEdit写出来。回过头来看,基本没任何难度---我写的是HGE扩展。[em]e19[/em]我只需要重载Render--这个是纯虚函数,必须实现,以及KeyClicked来处理按键消息。然后剩余的事情就是处理插入符以及一些字符串处理,以及渲染到屏幕上的一些小技巧而已!真汗![em]e19[/em]
    忍了,真觉得有点侮辱自己!晚上上完课回来,全面阅读那个扩展GUI! 话说回来,那个扩展GUI连个介绍文档都没有,原代码文件头也很只有很少的说明,而且大部分是乱码!晕,据说HGE论坛很多俄罗斯人,难道是个俄罗斯人写的?我个人还是觉得,外国人写的代码漂亮多了!
    HGE作者Haaf,此乃一代人才也!HGE论坛充斥的各路老外,牛人也颇多啊!那里还有个Qaf framework,也公开原代码的,恩,等把GUI弄的差不多了,再去阅读那分代码。

2006.9.8
0:42
    HGE扩展GUI库总体系统代码阅读完毕。老实说,代码难度也不大。
    整个GUI系统原理大致是:用户继承抽象基类GUIApp,实现具体的OnEvent函数,然后该类会管理所有的GUIAppWindow对象,GUIAppWindow窗口对象会管理其上的所有子控件。相应地,GUIApp派生类会直接得到鼠标和键盘消息,然后派发给所有窗口对象,然后窗口对象再把消息派发到具体的控件对象上。
    总体而言,其实现原理还是跟《使用C++和DirectX开发游戏GUI》讲述的差不多,尤其是这个扩展库。经典部分在于那个OnEvent虚函数--在其GUIApp派生类中又被重载为纯虚函数!确实很经典!
    我对游戏GUI的研究差不多就到这里了。接下来可能会具体地阅读一些控件的实现代码。
    代码阅读日志:[url]http://blog.csdn.net/kevinlynx/archive/2006/09/08/1192535.aspx[/url]
1:21
    阅读了这个扩展GUI库的Button和LineEdit控件的代码。Button类变为了三状态按钮,难度不大;LineEdit类思路和我的 CLineEdit 思路类似。它在处理插入符时,采用了字符数组索引的方式来定位。
    另外,hgeGUIObject::KeyClicked( int ,int chr );参数chr是转义后的字符,它是处理了特殊按键,例如shift, CapsLock,后的字符。我们可以直接使用这个参数来确定输入信息。

13:30
    接触了Qaf这个framework,感觉到游戏框架的威力!我觉得我甚至可以用一个小时就把以前的Magic Girl做出来!
    不过这个库做的有点复杂,它的API比HGE本身还复杂了点,并且花费的代价更高--一个程序随便都是500KB,并且要Enable RTTI,还要连接很多DX8的库。尽管如此,我还是觉得这个库做的很不错。
    中午把它的教程粗略地翻译了一下:[url]http://blog.csdn.net/kevinlynx/archive/2006/09/08/1196987.aspx[/url]
    从这个库里学到了一些思想:例如碰撞检测,有点类似张勇的<Super Mario>的碰撞检测;还有游戏物体,都有update来更新逻辑, render来渲染自身,游戏里有个容器,保存所有游戏物体。

2006.9.11
    开始学习STL了,这一次说什么也要把STL练熟。
    到现在这个时间为止,看STL已经有4个小时。我目前的理解是:STL三大部分:容器,迭代器,算法。容器用来保存对象,算法用来操作对象,迭代器用来帮助算法操作对象。迭代器很象个指针,容器返回自己包含的对象的指针(成为一个迭代器)给算法操作。
12:04
    [em]e19[/em]怎么觉得,STL这么简单?感觉上,学习STL就如同学习QT一样,当理解了基本概念后,剩下的就只有熟练度了![em]e19[/em] [img]http://olF.photo.qq.com/?file=A1B86AA76A480C4B84B9B984964E4E27456AF3BE3D0CFF70B80B663C69A7D25A[/img]
2006.9.12
0:37
     大致理清了《C++标准程序库》这本书的编排:我粗略地看完了第5章,然后发现,1-4章是general programming 的基础,5章是STL综述,6---10是STL各组件之详述,分别为container, iterator, funcor, algorithm;10-15章相当于扩展STL论述。
     这么一本700多页的大部头书,德国人操笔,侯捷/孟岩翻译,价值人民币108![em]e19[/em]在这之前我看过的最贵的计算机书是《C++程序设计》(C++语言祖师爷之作,出自贝尔实验室),上千页,85人民币。前段时间在外国网站上看到<Game Programming Gem 4>,85美圆!--结果跑到中国来卖后,变成85人民币了。
     目前想买回来珍藏的书有:《设计模式》(四人团之作),《C++标准程序库》(侯捷/孟岩译),《游戏编程精粹3》(估计短时间之类还不能全部看懂)

16:30
     学STL一天了,我觉得我应该找个东西来练习下,做题显然很书呆子。学习程序设计以来,我可没做过书后面的习题,那让人觉得恶心。我决定在那个嵌入式项目里实验一下,里面有个链表的结构,我当时连节点类型都写好了。另外,我也想把STL加进我写过的游戏程序中,Feeding Frenzy里有个 SpriteContainer。
     当我打开Feeding Frenzy的原代码时,我真自豪那些代码是我写的。我把它开源了,但是到现在为止还没人给我探讨过代码中的优雅,这让我很失望。要把SpriteContainer改为STL版的,似乎有点困难,因为那个工程后期的时候,我做了一些不是很明智的工作,虽然我知道那不明智--哈哈,我在代码的注释里写道:
//good job, the player fish ate the bugbear fish
//first,change the player's status,although I donot think
//this is a good way ,not a good way...
     看来,要在我的代码里放进STL,只有在不久后的一个实验性项目里,我会用进HGE,Qaf,STL到里面去。---事实上 Qaf包含了一些container的概念,这意味着STL也许不会用到太多。
     Perfect!这周把嵌入式项目代码加完,下周就开始这个实验性项目!--Maybe, it will be named "Magic girl"。

2006.9.15
0:42
    总结下目前对于STL的理解:
    STL contains five kinds of components: containers, iterators, algorithms, function objects and allocators. 5个组件:容器,迭代器,算法,仿函数(函数对象),空间配置器。
    关于容器很好理解,我用一句话来解释它:A object that contains many other objects!
    关于迭代器,一般的资料解释为一个“可遍历STL容器内全部或部分元素”的对象。在STL中,其有5种迭代器:Input, Output, Forward, Bidirectional, Random Access。一般的STL容器提供后二种迭代器,即双向迭代器和随机存取迭代器。
    关于Adapter:大致和《设计模式》里描述的 Adapter模式类似。可以大致解释为:Adaptors are classes that sit between you and another class, and translate the messages you want to send into the messages the other class wants to receive. 意即:当一个类(其他接口也可以)拥有某种功能,但是其接口不是你想要的,于是给其包装以下,使其接口适合于你。
    迭代器有三种适配器:Reverse, Insert, Stream .在容器中也有适配器的影子。

    

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值