From c23d7e40662ca12e382225fa93f6b4cc0fd4d81e Mon Sep 17 00:00:00 2001 From: Nomango <569629550@qq.com> Date: Sat, 4 Nov 2017 16:20:17 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E5=8F=AF=E4=BB=A5=E5=9C=A8?= =?UTF-8?q?=E6=B8=B8=E6=88=8F=E6=9A=82=E5=81=9C=E6=97=B6=E8=BF=90=E8=A1=8C?= =?UTF-8?q?=E7=9A=84=E7=9B=91=E5=90=AC=E5=99=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Easy2D/Listener/EListener.cpp | 5 +++++ Easy2D/Manager/EMsgManager.cpp | 14 ++++++-------- Easy2D/Node/EButton.cpp | 11 +++++++---- Easy2D/elisteners.h | 5 +++++ Easy2D/emanagers.h | 12 ++++-------- 5 files changed, 27 insertions(+), 20 deletions(-) diff --git a/Easy2D/Listener/EListener.cpp b/Easy2D/Listener/EListener.cpp index 5c033f2e..c94a895e 100644 --- a/Easy2D/Listener/EListener.cpp +++ b/Easy2D/Listener/EListener.cpp @@ -42,3 +42,8 @@ void e2d::EListener::setName(const EString & name) { m_sName = name; } + +void e2d::EListener::setAlwaysWorking(bool bAlways) +{ + m_bAlways = bAlways; +} diff --git a/Easy2D/Manager/EMsgManager.cpp b/Easy2D/Manager/EMsgManager.cpp index d5d1cf20..1adb511c 100644 --- a/Easy2D/Manager/EMsgManager.cpp +++ b/Easy2D/Manager/EMsgManager.cpp @@ -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(pParentNode == nullptr, "Bind EListenerMouse with a NULL ENode pointer!"); @@ -84,13 +84,12 @@ void e2d::EMsgManager::bindListener(EListenerMouse * listener, ENode * pParentNo listener->start(); listener->retain(); - listener->m_bAlways = always; listener->m_pParentNode = pParentNode; 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(pParentNode == nullptr, "Bind EListenerKeyboard with a NULL ENode pointer!"); @@ -105,7 +104,6 @@ void e2d::EMsgManager::bindListener(EListenerKeyboard * listener, ENode * pParen listener->start(); listener->retain(); listener->m_pParentNode = pParentNode; - listener->m_bAlways = always; s_vKeyboardListeners.push_back(listener); } } diff --git a/Easy2D/Node/EButton.cpp b/Easy2D/Node/EButton.cpp index c5357b07..2ca40d18 100644 --- a/Easy2D/Node/EButton.cpp +++ b/Easy2D/Node/EButton.cpp @@ -109,11 +109,14 @@ void e2d::EButton::setDisable(bool disable) 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; + + // 停止其他监听器 + EMsgManager::stopAllMouseListenersBindedWith(this); + // 新建一个监听器 + auto listener = new EListenerMouse(std::bind(&EButton::_listenerCallback, this)); + listener->setAlwaysWorking(true); + EMsgManager::bindListener(listener, this); } void e2d::EButton::_callOn() diff --git a/Easy2D/elisteners.h b/Easy2D/elisteners.h index 8cb7d5d1..7afba958 100644 --- a/Easy2D/elisteners.h +++ b/Easy2D/elisteners.h @@ -42,6 +42,11 @@ public: const EString &name ); + // 设置监听器在游戏暂停时继续工作 + void setAlwaysWorking( + bool bAlways + ); + // 绑定监听器到场景 virtual void bindWith( EScene * pParentScene diff --git a/Easy2D/emanagers.h b/Easy2D/emanagers.h index bcab4adf..c0c969e0 100644 --- a/Easy2D/emanagers.h +++ b/Easy2D/emanagers.h @@ -47,15 +47,13 @@ public: // 绑定鼠标消息监听器到场景 static void bindListener( EListenerMouse * listener, - EScene * pParentScene, - bool always = false /* 是否在游戏暂停时仍然监听 */ + EScene * pParentScene ); // 绑定鼠标消息监听器到节点 static void bindListener( EListenerMouse * listener, - ENode * pParentNode, - bool always = false /* 是否在游戏暂停时仍然监听 */ + ENode * pParentNode ); // 启动具有相同名称的鼠标消息监听器 @@ -102,15 +100,13 @@ public: // 绑定按键消息监听器到场景 static void bindListener( EListenerKeyboard * listener, - EScene * pParentScene, - bool always = false /* 是否在游戏暂停时仍然监听 */ + EScene * pParentScene ); // 绑定按键消息监听器到节点 static void bindListener( EListenerKeyboard * listener, - ENode * pParentNode, - bool always = false /* 是否在游戏暂停时仍然监听 */ + ENode * pParentNode ); // 启动名称相同的按键消息监听器