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

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;
}
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(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);
}
}

View File

@ -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()

View File

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

View File

@ -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
);
// 启动名称相同的按键消息监听器