自从发现了我们公司引擎的GUI系统是使用的CEGUI之后,一直想花点时间去看看CEGUI的代码,不过一直太懒,加上CEGUI有点庞大,所以一直没去做。一直到我周五发现了另一个GUI系统--guichan,是一个非常小巧的GUI系统,主页在http://guichan.sourceforge.net/。

       周六花了下午的时间基本了解guichan的实现,并将其整合到我写的一个2D引擎中去了。为防止以后我对这个失去兴趣并且渐渐忘记,所以有必要记录一下某些东西。

1. 每帧除了要调用gui类的logic和draw以外,还要调用Input类的pushInput,否则得不到输入

2. logic类调用挂它下面的widget类的logic,下面的widget如果是widget容器widget的话又会将这个调用传递下去

3. 只有少数几个控件实现了logic,其余控件都是在gui类调用handleKeyInput和handleMouseInput函数时得到了事件,并根据事件改变的

4. 每个widget也实现自己的draw函数,用于描绘自己,也是自顶向下传递下去被调用的

5. gui类的handleMouseInput和handleKeyInput函数每次根据Input类的对象来得到当前事件信息,如果是键盘事件,则先得到当前获得焦点的widget,并调用绑定在这个widget上的相应键盘侦听器对象的接口;如果是鼠标事件,则通过鼠标事件发生时得到的坐标来得到位于这个坐标位置处的处于层次最顶端的widget,并调用绑定在这个widget上的相应的鼠标侦听器对象的接口

6. 字体,使用guichan的字体的话需要自己继承它那个font类,然后写一个自己的font类,并实现其中的描画函数,即根据字符码来提供绘制相应字符的函数。所以说要画什么字符得有相应的图片才行。guichan内部带的一个defaultfont只是对于任何的字符都画一个矩形而已。

     先就这些吧,附一张图,我将其整合到我的引擎中后,试了几个控件,一个icon,一个button,一个window,window上有一个imagebutton和一个checkbox。

guichan初接触_第1张图片

阅读全文
类别: 默认分类  查看评论