修复了其他场景的按钮继续工作的bug;修复了监听器和定时器在某些情况下崩溃的bug
This commit is contained in:
parent
a7b29bbdf9
commit
07abf5cf96
|
|
@ -101,7 +101,7 @@
|
|||
<Optimization>Disabled</Optimization>
|
||||
<PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<SDLCheck>true</SDLCheck>
|
||||
<DebugInformationFormat>None</DebugInformationFormat>
|
||||
<DebugInformationFormat>EditAndContinue</DebugInformationFormat>
|
||||
<MinimalRebuild>false</MinimalRebuild>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -24,22 +24,14 @@ 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->getParentNode() &&
|
||||
mlistener->getParentNode()->getParentScene() == EApp::getCurrentScene())
|
||||
if (mlistener->_isReady())
|
||||
{
|
||||
mlistener->_callOn();
|
||||
|
||||
if (mlistener->m_bSwallow)
|
||||
break;
|
||||
}
|
||||
}
|
||||
} while (i != 0);
|
||||
}
|
||||
|
||||
|
|
@ -57,22 +49,14 @@ 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->getParentNode() &&
|
||||
klistener->getParentNode()->getParentScene() == EApp::getCurrentScene())
|
||||
if (klistener->_isReady())
|
||||
{
|
||||
klistener->_callOn();
|
||||
|
||||
if (klistener->m_bSwallow)
|
||||
break;
|
||||
}
|
||||
}
|
||||
} while (i != 0);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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<EListenerPhysics*>::size_type i = s_vListeners.size();
|
||||
|
||||
if (listener->isRunning())
|
||||
do
|
||||
{
|
||||
if (listener->getParentNode() &&
|
||||
listener->getParentNode()->getParentScene() == EApp::getCurrentScene())
|
||||
auto listener = s_vListeners[--i];
|
||||
|
||||
if (listener->_isReady())
|
||||
{
|
||||
listener->_callOn();
|
||||
if (listener->m_bSwallow)
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
} while (i != 0);
|
||||
}
|
||||
|
||||
void e2d::EPhysicsManager::bindListener(EListenerPhysics * listener, EScene * pParentScene)
|
||||
|
|
|
|||
|
|
@ -8,24 +8,17 @@ static e2d::EVector<e2d::ETimer*> 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->getParentNode() &&
|
||||
t->getParentNode()->getParentScene() == EApp::getCurrentScene())
|
||||
{
|
||||
if (t->_isReady())
|
||||
{
|
||||
t->_callOn();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void e2d::ETimerManager::bindTimer(ETimer * timer, EScene * pParentScene)
|
||||
|
|
|
|||
|
|
@ -1,4 +1,5 @@
|
|||
#include "..\etools.h"
|
||||
#include "..\enodes.h"
|
||||
#include "..\emanagers.h"
|
||||
#include "..\Win\winbase.h"
|
||||
|
||||
|
|
@ -105,6 +106,10 @@ void e2d::ETimer::_callOn()
|
|||
|
||||
bool e2d::ETimer::_isReady()
|
||||
{
|
||||
if (m_bRunning &&
|
||||
m_pParentNode &&
|
||||
m_pParentNode->getParentScene() == EApp::getCurrentScene())
|
||||
{
|
||||
if (m_bAtOnce && m_nRunTimes == 0)
|
||||
return true;
|
||||
|
||||
|
|
@ -116,5 +121,6 @@ bool e2d::ETimer::_isReady()
|
|||
m_tLast += milliseconds(m_nInterval);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -66,6 +66,9 @@ protected:
|
|||
// 执行监听器回调函数
|
||||
virtual void _callOn() = 0;
|
||||
|
||||
// 获取监听器状态是否就绪
|
||||
virtual bool _isReady() const;
|
||||
|
||||
protected:
|
||||
EString m_sName;
|
||||
bool m_bRunning;
|
||||
|
|
|
|||
Loading…
Reference in New Issue