SweetDream
高歌一壶新酿酒,醉抱青山不必归。

                  Cegui中的事件机制用的是观察者模式。需要订阅事件的类必须从EventSet继承:

 

订阅的一个感兴趣的事件调用EventSetsubscribeEvent,比如RenderDisplaySize改变感兴趣,它可以通过以下代码来订阅:

    // subscribe to hear about display mode changes

    d_rendererCon = d_renderer->subscribeEvent(Renderer::EventDisplaySizeChanged, Event::Subscriber(&CEGUI::System::handleDisplaySizeChange, this));

         subscribeEvent的第一个参数为字符串,在Cegui中是通过字符串匹配来来触发相应事件;第二个参数是对触发的回调函数的一个封装。


 

 

 

一旦订阅好自己感兴趣的事件后,接着就是等着它触发了。

void DirectX9Renderer::setDisplaySize(const Size& sz)

{

     if (d_display_area.getSize() != sz)

     {

         d_display_area.setSize(sz);

 

         EventArgs args;

         fireEvent(EventDisplaySizeChanged, args, EventNamespace);

     }

 

}

从上面代码可以看到当DisplaySize改变的时候会生成一个EventArgs对象,然后调用fireEvent函数,EventArgs 是回调参数,用过C#的朋友一定很熟悉它.


 

最后fireEvent则根据传入的字符串EventDisplaySizeChanged来触发之前注册的回调函数。

 

 

完整的类图:


posted on 2008-10-18 11:00  SweetDream  阅读(1953)  评论(2编辑  收藏  举报