CEGUI事件机制

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

CEGUI事件机制_第1张图片

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

    // subscribe to hear about display mode changes

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

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

CEGUI事件机制_第2张图片

 

 

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

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#的朋友一定很熟悉它.

CEGUI事件机制_第3张图片

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

完整的类图:

CEGUI事件机制_第4张图片

你可能感兴趣的:(CEGUI事件机制)