Ogre SdkTray自学

本文探讨了Ogre 1.7版本中新的GUI系统——SdkTray,该系统基于Overlay实现,不再依赖CEGUI。SdkTray使用了一个名为“tray”的系统,主要代码位于SdkTray.h。作者分析了SdkTray的源代码,包括命名空间、枚举、类定义,尤其是Widget类和它的子类,如Button、TextBox等。虽然SdkTray功能尚不完整,但其灵活性和与Material系统的结合使其具有研究价值。此外,文章还介绍了SdkTrayManager的角色,它是Widget的管理者,负责事件处理和显示层的管理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Ogre 1.7 这个版本比以前有了很多的变化,其中之一就是在Ogre官方不再包含CEGUI的组件,但是尽管没有使用CEGUI,在官方的demo中仍然可以看见有gui的功能,那么Ogre又是怎么实现的呢?

      根据官网的说明,新的gui系统使用的是一个叫“tray”的系统,这个系统的主要代码在SdkTray.h这个文件之中。sdktray使用的Ogre overlay来实现gui,并且Ogre 1.7比以前版本似乎也多了一些gui相关的组件,这大概预示,Ogre即将开发自己的gui组件,而cegui也许将被抛弃。

      不管未来如何,研究下sdktray还是很有意义的一件事情,使用overlay来实现gui,最大的特点在于可以灵活利用Ogre强大的material系统,实现很多不可思议的效果。比起使用cegui来,减少了学习周期,但是比较遗憾的是,目前Ogre 1.7的sdktray还不能作为一个完整的gui组件,有些功能还很不完善。

      现在来研究以下sdktray.h文件的源代码.

 

一、分析SdkTays.h这个头文件

(1)这个头文件命名空间为:OgreBits

(2)此命名空间下首先定义(包含)了一些枚举TrayLocation(位置)、ButtonState(ButtonState就如同其名字一样,指的是鼠标按下、悬浮以及释放的情况下的gui对应3种状态)

(3)接着定义了一个sdkTrayListener类它常被用做基类,从接口来看,应该是实现gui对应的功能,包括点击(含有Hit单词的函数)、选择(Select)、移动(Move)等等【本头文件中定义的sdkTrayListener类里面很简单,全是virtual的诸如Hit或Select类的函数,sdkTrayListener是个纯虚类】。

(4)接着定义了一个Widget类(组件类)。

        Widget是所有窗口组件的基类。一个Widget包含一个OverlayElement和一个sdktraylistener,分别实现外观和对应的事件响应。这个基类还包括几个static的工具函数。nukeOverlayElement()的作用是删除掉OverlayElement(包括子element),isCursorOver ()用来判断鼠标是否悬浮在gui的上方。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值