恩..这个东西我把他命名为0.1..我写这个的动机是由sdktray激发的灵感.不过我写完现在的代码后发现,差不多所有代码都重新改写了.因为实际上还有很多东西需要扩充,但是我最近时间有点忙,而且基础的东西我已经实现了 所以我先把代码放上来.
1 特色
OEGUI最大特色就是支持Ogre自带的脚本格式,并且继承了所有目前OverlayElement脚本中可以使用的属性.这意味着大家可以自由利用Ogre的材质系统,随意的改变自己gui的外观和行为而且不用改变任何代码.我相信这个gui是个很容易扩充的gui,同时也是运行时有非常大自由度的gui之一.
2 实现
OEGUI现在分为3个部分.简单的说,OEGUISystem类负责管理及传递事件,Action负责GUI的行为,而WidgetOverlayElement负责GUI的外观.
为了实现GUI的行为,我改写了以前sdktray的listener,并且现在把它命名为Action.这个接口比以前大了不少,并且从逻辑层面上讲,要比sdktray要低一些,但是,使用这个Action 你可以写出自己的强悍的功能扩展.简单的说,Action 这个类 负责 GUI的"行为".目前我写了一个基本的Action:Drag 这个类可以实现拖动的效果.本来还打算写支持输入,下拉等功能的Action,但是目前有点挤不出时间.
为了扩展gui的功能,我写了2个类,实现对OverlayElement的扩展.一个是WidgetOverlayElement,这个类继承自Ogre::BorderPanelOverlayElement,是所有gui的基础,类中保存不同状态下的材质String,当Widget状态改变的时候,可以通过改变对应的材质实现外观的改变.除此之外,Widget还保存有Action的集合,方便和不同的Action组合起来实现自己的GUI功能.另一个扩展是ColourTextAreaOverlayElement,这个类继承自Oger::TextAreaOverlayElement,实现了部分字体颜色的更改以及自动换行的功能:提供一个区域的宽和高,ColourTextArea将会自动进行填充,多余的字体将被自动截断.这2个OverlayElement正如名字所揭示的那样,是可以使用Ogre::OverlayManager来进行创建的.但是,为了让你的GUI不仅仅表现得是个放在屏幕上的花屏,请用OEGUISystem来创建.
3 使用介绍和截图
恩...代码是很简洁的,因为很多东西都放到脚本中去了.唯一需要提醒的地方是,OEGUISystem这个类实例化的地方,我强烈建议当你写完new Root()后马上写 new Ogre::OEGUISystem().其次呢,就象CEGUI那样,在OIS部分,添加对应的OEGUISystem::injectXXX()...
然后在你的程序相当于createScene()的位置添加如下代码:
Ogre::OEGUISystem* s = Ogre::OEGUISystem::getSingletonPtr(); WidgetOverlayElement* w = s->createWidgetFromTemplate("Default/Mouse","Mouse","mouse001"); WidgetOverlayElement* b = s->createWidgetFromTemplate("Default/Widget","Widget","test"); ColourTextAreaOverlayElement* cta = (ColourTextAreaOverlayElement*)b->getChild("test/Default/Button/Caption"); if(cta) { // cta->setMaxWidth(200); // cta->setMaxHeight(300); // cta->setShowVDirection("bottom"); cta->setCaption("this is a colourTextArea,this is a test"); ColourValue t = ColourValue::Red; ColourValue b(0,1,1); cta->setTextColour(t,b,6,18); }
这段的主要作用就是首先创建了一个鼠标,然后创建了一个Widget,这个Widget包含一个ColourText,在程序中,把这个Text位于6-18位置的字进行染色.注释掉的语句用来实现其他效果.在这些代码中,"Default/Widget"这个字符串代表了一个脚本的名字.这段代码的运行截图如下,正如你所看见的那样,这个Widget外观使用了sdktray的button的材质.
代码的下载地址在这里:http://download.csdn.net/source/2260084
有关脚本的介绍看这里:http://blog.csdn.net/moonstrace/archive/2010/04/19/5504363.aspx
大家使用中有什么问题可以回复我的博客,或者给我发邮件:[email protected]