新增可以在游戏暂停时运行的监听器

This commit is contained in:
Nomango 2017-11-04 16:20:17 +08:00
parent 109a86e19f
commit c23d7e4066
5 changed files with 27 additions and 20 deletions

View File

@ -42,3 +42,8 @@ void e2d::EListener::setName(const EString & name)
{ {
m_sName = name; m_sName = name;
} }
void e2d::EListener::setAlwaysWorking(bool bAlways)
{
m_bAlways = bAlways;
}

View File

@ -60,17 +60,17 @@ void e2d::EMsgManager::KeyboardProc(UINT message, WPARAM wParam, LPARAM lParam)
} }
} }
void e2d::EMsgManager::bindListener(e2d::EListenerMouse * listener, EScene * pParentScene, bool always /* = false */) void e2d::EMsgManager::bindListener(e2d::EListenerMouse * listener, EScene * pParentScene)
{ {
EMsgManager::bindListener(listener, pParentScene->getRoot(), always); EMsgManager::bindListener(listener, pParentScene->getRoot());
} }
void e2d::EMsgManager::bindListener(EListenerKeyboard * listener, EScene * pParentScene, bool always /* = false */) void e2d::EMsgManager::bindListener(EListenerKeyboard * listener, EScene * pParentScene)
{ {
EMsgManager::bindListener(listener, pParentScene->getRoot(), always); EMsgManager::bindListener(listener, pParentScene->getRoot());
} }
void e2d::EMsgManager::bindListener(EListenerMouse * listener, ENode * pParentNode, bool always /* = false */) void e2d::EMsgManager::bindListener(EListenerMouse * listener, ENode * pParentNode)
{ {
WARN_IF(listener == nullptr, "EListenerMouse NULL pointer exception!"); WARN_IF(listener == nullptr, "EListenerMouse NULL pointer exception!");
WARN_IF(pParentNode == nullptr, "Bind EListenerMouse with a NULL ENode pointer!"); WARN_IF(pParentNode == nullptr, "Bind EListenerMouse with a NULL ENode pointer!");
@ -84,13 +84,12 @@ void e2d::EMsgManager::bindListener(EListenerMouse * listener, ENode * pParentNo
listener->start(); listener->start();
listener->retain(); listener->retain();
listener->m_bAlways = always;
listener->m_pParentNode = pParentNode; listener->m_pParentNode = pParentNode;
s_vMouseListeners.push_back(listener); s_vMouseListeners.push_back(listener);
} }
} }
void e2d::EMsgManager::bindListener(EListenerKeyboard * listener, ENode * pParentNode, bool always /* = false */) void e2d::EMsgManager::bindListener(EListenerKeyboard * listener, ENode * pParentNode)
{ {
WARN_IF(listener == nullptr, "EListenerKeyboard NULL pointer exception!"); WARN_IF(listener == nullptr, "EListenerKeyboard NULL pointer exception!");
WARN_IF(pParentNode == nullptr, "Bind EListenerKeyboard with a NULL ENode pointer!"); WARN_IF(pParentNode == nullptr, "Bind EListenerKeyboard with a NULL ENode pointer!");
@ -105,7 +104,6 @@ void e2d::EMsgManager::bindListener(EListenerKeyboard * listener, ENode * pParen
listener->start(); listener->start();
listener->retain(); listener->retain();
listener->m_pParentNode = pParentNode; listener->m_pParentNode = pParentNode;
listener->m_bAlways = always;
s_vKeyboardListeners.push_back(listener); s_vKeyboardListeners.push_back(listener);
} }
} }

View File

@ -109,11 +109,14 @@ void e2d::EButton::setDisable(bool disable)
void e2d::EButton::setCallback(const BUTTON_CLICK_CALLBACK & callback) void e2d::EButton::setCallback(const BUTTON_CLICK_CALLBACK & callback)
{ {
EMsgManager::stopAllMouseListenersBindedWith(this);
auto listener = new EListenerMouse(std::bind(&EButton::_listenerCallback, this));
EMsgManager::bindListener(listener, this, true);
m_Callback = callback; m_Callback = callback;
// 停止其他监听器
EMsgManager::stopAllMouseListenersBindedWith(this);
// 新建一个监听器
auto listener = new EListenerMouse(std::bind(&EButton::_listenerCallback, this));
listener->setAlwaysWorking(true);
EMsgManager::bindListener(listener, this);
} }
void e2d::EButton::_callOn() void e2d::EButton::_callOn()

View File

@ -42,6 +42,11 @@ public:
const EString &name const EString &name
); );
// 设置监听器在游戏暂停时继续工作
void setAlwaysWorking(
bool bAlways
);
// 绑定监听器到场景 // 绑定监听器到场景
virtual void bindWith( virtual void bindWith(
EScene * pParentScene EScene * pParentScene

View File

@ -47,15 +47,13 @@ public:
// 绑定鼠标消息监听器到场景 // 绑定鼠标消息监听器到场景
static void bindListener( static void bindListener(
EListenerMouse * listener, EListenerMouse * listener,
EScene * pParentScene, EScene * pParentScene
bool always = false /* 是否在游戏暂停时仍然监听 */
); );
// 绑定鼠标消息监听器到节点 // 绑定鼠标消息监听器到节点
static void bindListener( static void bindListener(
EListenerMouse * listener, EListenerMouse * listener,
ENode * pParentNode, ENode * pParentNode
bool always = false /* 是否在游戏暂停时仍然监听 */
); );
// 启动具有相同名称的鼠标消息监听器 // 启动具有相同名称的鼠标消息监听器
@ -102,15 +100,13 @@ public:
// 绑定按键消息监听器到场景 // 绑定按键消息监听器到场景
static void bindListener( static void bindListener(
EListenerKeyboard * listener, EListenerKeyboard * listener,
EScene * pParentScene, EScene * pParentScene
bool always = false /* 是否在游戏暂停时仍然监听 */
); );
// 绑定按键消息监听器到节点 // 绑定按键消息监听器到节点
static void bindListener( static void bindListener(
EListenerKeyboard * listener, EListenerKeyboard * listener,
ENode * pParentNode, ENode * pParentNode
bool always = false /* 是否在游戏暂停时仍然监听 */
); );
// 启动名称相同的按键消息监听器 // 启动名称相同的按键消息监听器