CEGUI0.6特效调度功能接口

来源:互联网 发布:linux sleep 毫秒 编辑:程序博客网 时间:2024/05/02 16:08

新功能-窗口特效调度

为了使用Gui脚本模块, 今天某人把CNB整个底层GUI组件全部升级到0.6了.... 也重新编译了ogre的CEGUI渲染器...
在浏览代码时发现了0.6增加了一个不错的新功能接口----特效调度器(GUI.EffectScheduler)
虽然这个功能还没有被正式支持, 但是已经有个接口原型了... 下面我们就来对这个接口做一个简单地预览吧~


未实现的特效接口

如果你仔细观察下CEGUI0.6的头文件目录.. 会发现include目录增加了一个CEGUITask.h的文件, 但是这样文件并没有被包含到CEGUI外部暴露接口中, 同时也没有被实现... 这就是说明这个功能在完善中...


 

代码演示

那么让我们来看一下具体的接口代码吧, 打开CEGUITask.h...

class CEGUIEXPORT Task
{
public:
    Task(bool destroy = true):d_destroyOnComplete(destroy);
    ~Task();

    /**
     * Actual code to be run when the task is called.
     * /param elapsed Amount of time since last frame update
     * /return
     */

    virtual bool run(float elapsed) = 0;

protected:
    bool d_destroyOnComplete; //!< Does this task destory itself once it completes?


};


上面的CEGUI::Task类提供了一个调度任务的接口, 你可以通过这个接口派生出自己的具体任务类, 在CEGUI中, 这些任务被称为特效, 如: 淡入淡出, 抖动, 旋转等, 想一想3D桌面中窗口中的那些特效....


 

关于GUI特效调度的应用

一个特效任务在执行时将被添加特效调度器中, 而你可以为特效指定时间, 延迟等细节, 当完毕后它将被移除调度队列, 你也可以选择在特效结束后销毁该特效, 或者让改特效按一定的间隔时间执行...

你可以让你的HUD在每隔3秒抖一次...
又或者血槽在接近零界点后不停地执行闪动特效等.... 当补血操作完成后这个特效就被移除调度, 所以自然闪动就停止了...

那么让我们来看一下CEGUI对应具体特效的实现吧...

class CEGUIEXPORT WidgetFadeTask : public Task
{
public:

    enum eFadeDirection
    {
        FADEDIR_IN = 0,
        FADEDIR_OUT = 1
    }

    WidgetFadeTask(Window* widget,eFadeDirection fadedir, float targetalpha, bool destroy = true):Task(destroy){};

    /**
     * Overridden from base task class -- Does the actual fading on the window.
     * /param elapsed Amount of time since the last frame update
     * /return True on success
     */

    virtual bool run(float elapsed);

protected:
    eFadeDirection    d_fadeDirection; //!< Dictates which direction we are fading (in or out)

    float            d_targetAlpha; //!< What alpha are we fading to/from?

    Window*            d_widget;//!< what widget are we affecting?

};


WidgetFadeTask类同样被放置在CEGUITask.h文件, 要注意的是当前这个类并没有被实现...
当特效被构建后, 我们需要为特效指定一个作用目标, 在CEGUI里这个目标就是CEGUI的基本原语--窗口(CEGUI::Window)...
在淡入淡出特效中, 同时你还要为特效指定一些参数...
如: 淡入还是淡出(fadedir), 已经被执行特效后的目标透明度(targetalpha),
比如我可以做一个小淡出让窗口消失(当前->0%), 或者让窗口在一定的透明度区间内上下抖动, 体现一种状态效果(比如玩家HUD中了某个特殊状态)...


 

结论

CEGUI 0.6中提供了新的特效调度接口, 但是还没有正式支持, 估计在0.7发布的时候CEGUI就会支持良好的窗口特效扩展...让我们拭目以待吧=_=|||
PS: 嘛...或许去CEGUI的SVN上Check Out下能有新发现...

原创粉丝点击