diff --git a/Easy2D/Easy2D.vcxproj b/Easy2D/Easy2D.vcxproj index 5820be2a..e5eb2565 100644 --- a/Easy2D/Easy2D.vcxproj +++ b/Easy2D/Easy2D.vcxproj @@ -101,7 +101,7 @@ Disabled WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) true - None + EditAndContinue false diff --git a/Easy2D/Listener/EListener.cpp b/Easy2D/Listener/EListener.cpp index 3efbfe6a..12db408b 100644 --- a/Easy2D/Listener/EListener.cpp +++ b/Easy2D/Listener/EListener.cpp @@ -1,4 +1,5 @@ #include "..\elisteners.h" +#include "..\enodes.h" e2d::EListener::EListener() : m_bRunning(false) @@ -53,3 +54,16 @@ void e2d::EListener::setAlwaysWorking(bool bAlways) { m_bAlways = bAlways; } + +bool e2d::EListener::_isReady() const +{ + if (m_bRunning && m_pParentNode) + { + if (m_pParentNode->getParentScene() == EApp::getCurrentScene()) + { + if (!EApp::isPaused() || m_bAlways) + return true; + } + } + return false; +} diff --git a/Easy2D/Manager/EMsgManager.cpp b/Easy2D/Manager/EMsgManager.cpp index cae83a79..f020c054 100644 --- a/Easy2D/Manager/EMsgManager.cpp +++ b/Easy2D/Manager/EMsgManager.cpp @@ -24,21 +24,13 @@ void e2d::EMsgManager::MouseProc(UINT message, WPARAM wParam, LPARAM lParam) do { - auto &mlistener = s_vMouseListeners[--i]; + auto mlistener = s_vMouseListeners[--i]; - if (EApp::isPaused() && !mlistener->m_bAlways) - continue; - - if (mlistener->m_bAlways || mlistener->isRunning()) + if (mlistener->_isReady()) { - if (mlistener->getParentNode() && - mlistener->getParentNode()->getParentScene() == EApp::getCurrentScene()) - { - mlistener->_callOn(); - - if (mlistener->m_bSwallow) - break; - } + mlistener->_callOn(); + if (mlistener->m_bSwallow) + break; } } while (i != 0); } @@ -57,21 +49,13 @@ void e2d::EMsgManager::KeyboardProc(UINT message, WPARAM wParam, LPARAM lParam) do { - auto &klistener = s_vKeyboardListeners[--i]; + auto klistener = s_vKeyboardListeners[--i]; - if (EApp::isPaused() && !klistener->m_bAlways) - continue; - - if (klistener->m_bAlways || klistener->isRunning()) + if (klistener->_isReady()) { - if (klistener->getParentNode() && - klistener->getParentNode()->getParentScene() == EApp::getCurrentScene()) - { - klistener->_callOn(); - - if (klistener->m_bSwallow) - break; - } + klistener->_callOn(); + if (klistener->m_bSwallow) + break; } } while (i != 0); } diff --git a/Easy2D/Manager/EPhysicsManager.cpp b/Easy2D/Manager/EPhysicsManager.cpp index 5a312d68..871cec83 100644 --- a/Easy2D/Manager/EPhysicsManager.cpp +++ b/Easy2D/Manager/EPhysicsManager.cpp @@ -48,19 +48,19 @@ void e2d::EPhysicsManager::PhysicsGeometryProc(EGeometry * pActiveGeometry) void e2d::EPhysicsManager::PhysicsListenerProc() { // 执行鼠标消息监听函数 - for (size_t i = 0; i < s_vListeners.size(); i++) - { - auto &listener = s_vListeners[i]; + EVector::size_type i = s_vListeners.size(); - if (listener->isRunning()) + do + { + auto listener = s_vListeners[--i]; + + if (listener->_isReady()) { - if (listener->getParentNode() && - listener->getParentNode()->getParentScene() == EApp::getCurrentScene()) - { - listener->_callOn(); - } + listener->_callOn(); + if (listener->m_bSwallow) + break; } - } + } while (i != 0); } void e2d::EPhysicsManager::bindListener(EListenerPhysics * listener, EScene * pParentScene) diff --git a/Easy2D/Manager/ETimerManager.cpp b/Easy2D/Manager/ETimerManager.cpp index 1ee7cc67..71fc88c9 100644 --- a/Easy2D/Manager/ETimerManager.cpp +++ b/Easy2D/Manager/ETimerManager.cpp @@ -8,22 +8,15 @@ static e2d::EVector s_vTimers; void e2d::ETimerManager::TimerProc() { - if (EApp::isPaused()) + if (s_vTimers.empty() || EApp::isPaused()) return; for (size_t i = 0; i < s_vTimers.size(); i++) { auto &t = s_vTimers[i]; - if (t->isRunning()) + if (t->_isReady()) { - if (t->getParentNode() && - t->getParentNode()->getParentScene() == EApp::getCurrentScene()) - { - if (t->_isReady()) - { - t->_callOn(); - } - } + t->_callOn(); } } } diff --git a/Easy2D/Tool/ETimer.cpp b/Easy2D/Tool/ETimer.cpp index 7042dcd2..d47d43ec 100644 --- a/Easy2D/Tool/ETimer.cpp +++ b/Easy2D/Tool/ETimer.cpp @@ -1,4 +1,5 @@ #include "..\etools.h" +#include "..\enodes.h" #include "..\emanagers.h" #include "..\Win\winbase.h" @@ -105,16 +106,21 @@ void e2d::ETimer::_callOn() bool e2d::ETimer::_isReady() { - if (m_bAtOnce && m_nRunTimes == 0) - return true; - - if (m_nInterval == 0) - return true; - - if (GetInterval(m_tLast) >= m_nInterval) + if (m_bRunning && + m_pParentNode && + m_pParentNode->getParentScene() == EApp::getCurrentScene()) { - m_tLast += milliseconds(m_nInterval); - return true; + if (m_bAtOnce && m_nRunTimes == 0) + return true; + + if (m_nInterval == 0) + return true; + + if (GetInterval(m_tLast) >= m_nInterval) + { + m_tLast += milliseconds(m_nInterval); + return true; + } } return false; } diff --git a/Easy2D/elisteners.h b/Easy2D/elisteners.h index 6c85d892..998b3d09 100644 --- a/Easy2D/elisteners.h +++ b/Easy2D/elisteners.h @@ -66,6 +66,9 @@ protected: // 执行监听器回调函数 virtual void _callOn() = 0; + // 获取监听器状态是否就绪 + virtual bool _isReady() const; + protected: EString m_sName; bool m_bRunning;