CEGUI事件机制

    技术2022-05-20  61

    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来触发之前注册的回调函数。

    完整的类图:


    最新回复(0)