现在,我正在为游戏制作一个Gui图书馆。 Widgets为各种事件提供了几个回调/监听器。
关于它的事情是听众可以消耗一个事件。
这个问题来了。使用事件信息调用基类。它调用侦听器的回调。他们中的任何一个都可以处理这个事件。
这意味着用户可以检查事件是否已被处理。
前:
void TextBox::MouseClick(MouseEvent &event)
{
Widget::MouseClick(event);
if(!event.isHandled())
{
//do stuff
}
}
另一种方法是隐藏它并拥有onMouseClick(...)这是虚拟的,除非符合条件,否则不会被调用。我觉得这样做比较混乱,并且对于那些制作更多活动的人来说很烦人。
这是一个好设计吗?如果没有什么可以更好地适应这个?
由于
答案 0 :(得分:1)
如果您想参加许多活动,我宁愿选择onMouseClick
方式(IIUC):
void TextBox::onMouseClick(MouseEvent &event)
{
//do stuff or empty of not needed
}
类Widget中的:
void Widget::MouseClick(MouseEvent &event) // nonvirtual
{
// do the listeners' stuff
if(event.isHandled()) onMouseClick(event);
}