大致改动如下,我只说关键修改点
CCEventListener.h
将_onEvent成员变量,修改成:
//@return: void --> bool
//true – event consumed
//false – event not consumed
std::function<bool(Event*)> _onEvent; /// Event callback function
CCEventDispatcher.cpp
void EventDispatcher::dispatchEvent(Event* event)函数接近末尾的地方,
listener->_onEvent(event);
return event->isStopped();
这两行改成:
return listener->_onEvent(event) || event->isStopped();
CCEventListenerKeyboard.h
onKeyReleased改成:
@return: void --> bool
true表示已消耗,事件将中断分发
false表示未消耗,事件将继续分发
/
std::function<bool(EventKeyboard::KeyCode, Event)> onKeyReleased;
CCEventListenerKeyboard.cpp
bool EventListenerKeyboard::init()函数,改成如下实现:
bool EventListenerKeyboard::init()
{
//modified by laoyur 2014-10-16
//void --> bool
auto listener = (Event* event)->bool{
auto keyboardEvent = static_cast<EventKeyboard*>(event);
if (keyboardEvent->_isPressed)
{
if (onKeyPressed != nullptr)
onKeyPressed(keyboardEvent->_keyCode, event);
}
else
{
if (onKeyReleased != nullptr)
return onKeyReleased(keyboardEvent->_keyCode, event);
}
return false;
};
if (EventListener::init(Type::KEYBOARD, LISTENER_ID, listener))
{
return true;
}
return false;
}
以上是关键修改点,改完后build一下,把其他相关需要修改的地方照葫芦画瓢改一下即可,本质上是原来是void无返回,现在改成了bool返回类型,返回true的话表示事件已消耗,不会继续分发;返回false则继续分发。