subscribeEvent :这个方法有几个重载,这里只说这个
virtual Event::Connection subscribeEvent(const String& name, Event::Subscriber subscriber); // 声明 mRenderer->getDefaultRenderingRoot().subscribeEvent(CEGUI::RenderingSurface::EventRenderQueueStarted, CEGUI::Event::Subscriber(&UIManager::overlayHandler, this)); // 使用
subscribeEvent的作用是为某种类型的事件添加相应的处理方法,相对于那种listener机制,这种方式灵活到方法了。其中第一个参数是事件类型,第二个参数是为处理封装的一个对象。
fireEvent(EventRenderQueueStarted, args, EventNamespace);
凡是通过fireEvent方法触发过事件的EventRenderQueueStarted,都是事件类型。都可以作为subscribeEvent的第一个参数,所以它的类型为string。
template<typename T> SubscriberSlot(bool (T::*function)(const EventArgs&), T* obj) : d_functor_impl(new MemberFunctionSlot<T>(function, obj)) {}
第二个参数是个模板,这个模板的第一个参数是处理的方法,第二个参数是模板的类型。至此,整个事件触发和处理的过程都有了。