From 07abf5cf96e06107513efe17f0b79a00016617b0 Mon Sep 17 00:00:00 2001
From: Nomango <569629550@qq.com>
Date: Wed, 8 Nov 2017 15:23:07 +0800
Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E4=BA=86=E5=85=B6=E4=BB=96?=
=?UTF-8?q?=E5=9C=BA=E6=99=AF=E7=9A=84=E6=8C=89=E9=92=AE=E7=BB=A7=E7=BB=AD?=
=?UTF-8?q?=E5=B7=A5=E4=BD=9C=E7=9A=84bug=EF=BC=9B=E4=BF=AE=E5=A4=8D?=
=?UTF-8?q?=E4=BA=86=E7=9B=91=E5=90=AC=E5=99=A8=E5=92=8C=E5=AE=9A=E6=97=B6?=
=?UTF-8?q?=E5=99=A8=E5=9C=A8=E6=9F=90=E4=BA=9B=E6=83=85=E5=86=B5=E4=B8=8B?=
=?UTF-8?q?=E5=B4=A9=E6=BA=83=E7=9A=84bug?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
Easy2D/Easy2D.vcxproj | 2 +-
Easy2D/Listener/EListener.cpp | 14 ++++++++++++
Easy2D/Manager/EMsgManager.cpp | 36 +++++++++---------------------
Easy2D/Manager/EPhysicsManager.cpp | 20 ++++++++---------
Easy2D/Manager/ETimerManager.cpp | 13 +++--------
Easy2D/Tool/ETimer.cpp | 24 ++++++++++++--------
Easy2D/elisteners.h | 3 +++
7 files changed, 56 insertions(+), 56 deletions(-)
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;