perfect the pause function.
This commit is contained in:
parent
f6eecee3aa
commit
6319ed7f2b
|
|
@ -45,13 +45,9 @@ void e2d::EAction::stop()
|
|||
m_bEnding = true;
|
||||
}
|
||||
|
||||
void e2d::EAction::setTarget(ENode * node)
|
||||
void e2d::EAction::_setTarget(ENode * node)
|
||||
{
|
||||
if (!m_pTarget && node)
|
||||
{
|
||||
// 动作只能有一个目标
|
||||
m_pTarget = node;
|
||||
}
|
||||
m_pTarget = node;
|
||||
}
|
||||
|
||||
e2d::EAction * e2d::EAction::reverse() const
|
||||
|
|
|
|||
|
|
@ -22,7 +22,7 @@ e2d::EActionLoop * e2d::EActionLoop::clone() const
|
|||
void e2d::EActionLoop::_init()
|
||||
{
|
||||
EAction::_init();
|
||||
m_pAction->setTarget(m_pTarget);
|
||||
m_pAction->_setTarget(m_pTarget);
|
||||
m_pAction->_init();
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -35,7 +35,7 @@ void e2d::EActionSequence::_init()
|
|||
{
|
||||
for (auto action : m_vActions)
|
||||
{
|
||||
action->setTarget(m_pTarget);
|
||||
action->_setTarget(m_pTarget);
|
||||
}
|
||||
}
|
||||
// 初始化第一个动作
|
||||
|
|
|
|||
|
|
@ -35,8 +35,8 @@ e2d::EActionTwo * e2d::EActionTwo::reverse(bool actionReverse) const
|
|||
void e2d::EActionTwo::_init()
|
||||
{
|
||||
EAction::_init();
|
||||
m_pFirstAction->setTarget(m_pTarget);
|
||||
m_pSecondAction->setTarget(m_pTarget);
|
||||
m_pFirstAction->_setTarget(m_pTarget);
|
||||
m_pSecondAction->_setTarget(m_pTarget);
|
||||
|
||||
m_pFirstAction->_init();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -35,8 +35,8 @@ e2d::EActionTwoAtSameTime * e2d::EActionTwoAtSameTime::reverse(bool actionRevers
|
|||
void e2d::EActionTwoAtSameTime::_init()
|
||||
{
|
||||
EAction::_init();
|
||||
m_pFirstAction->setTarget(m_pTarget);
|
||||
m_pSecondAction->setTarget(m_pTarget);
|
||||
m_pFirstAction->_setTarget(m_pTarget);
|
||||
m_pSecondAction->_setTarget(m_pTarget);
|
||||
|
||||
m_pFirstAction->_init();
|
||||
m_pSecondAction->_init();
|
||||
|
|
|
|||
|
|
@ -2,12 +2,14 @@
|
|||
|
||||
e2d::EAnimation::EAnimation()
|
||||
: m_nFrameIndex(0)
|
||||
, m_pTarget(nullptr)
|
||||
{
|
||||
}
|
||||
|
||||
e2d::EAnimation::EAnimation(float invertal)
|
||||
: m_nFrameIndex(0)
|
||||
, m_fInterval(invertal)
|
||||
, m_pTarget(nullptr)
|
||||
{
|
||||
}
|
||||
|
||||
|
|
@ -45,7 +47,7 @@ void e2d::EAnimation::_update()
|
|||
// 重新记录时间
|
||||
m_fLast += m_fInterval;
|
||||
// 加载关键帧
|
||||
reinterpret_cast<ESprite*>(m_pTarget)->loadFrom(m_vFrames[m_nFrameIndex]);
|
||||
m_pTarget->loadFrom(m_vFrames[m_nFrameIndex]);
|
||||
m_nFrameIndex++;
|
||||
// 判断动作是否结束
|
||||
if (m_nFrameIndex == m_vFrames.size())
|
||||
|
|
@ -62,6 +64,11 @@ void e2d::EAnimation::_reset()
|
|||
m_nFrameIndex = 0;
|
||||
}
|
||||
|
||||
void e2d::EAnimation::_setTarget(ENode * node)
|
||||
{
|
||||
m_pTarget = static_cast<ESprite*>(node);
|
||||
}
|
||||
|
||||
void e2d::EAnimation::addKeyframe(EImage * frame)
|
||||
{
|
||||
if (frame)
|
||||
|
|
|
|||
|
|
@ -50,13 +50,6 @@ bool e2d::EGame::init(LPCTSTR sTitle, UINT32 nWidth, UINT32 nHeight, LPCTSTR pIc
|
|||
break;
|
||||
}
|
||||
|
||||
// 初始化计时
|
||||
if (!ETime::__init())
|
||||
{
|
||||
WARN_IF(true, "ETime::__init Failed!");
|
||||
break;
|
||||
}
|
||||
|
||||
// 初始化 DirectInput
|
||||
if (!EInput::__init())
|
||||
{
|
||||
|
|
@ -99,22 +92,32 @@ int e2d::EGame::run()
|
|||
::UpdateWindow(EWindow::getHWnd());
|
||||
// 处理窗口消息
|
||||
EWindow::__poll();
|
||||
// 刷新时间信息
|
||||
ETime::__updateNow();
|
||||
ETime::__updateLast();
|
||||
// 初始化计时
|
||||
ETime::__init();
|
||||
|
||||
while (!s_bEndGame)
|
||||
{
|
||||
// 处理窗口消息
|
||||
EWindow::__poll();
|
||||
// 刷新时间信息
|
||||
// 刷新时间
|
||||
ETime::__updateNow();
|
||||
|
||||
// 判断是否达到了刷新状态
|
||||
if (ETime::getDeltaTime() >= 17)
|
||||
if (ETime::__isReady())
|
||||
{
|
||||
ETime::__updateLast(); // 刷新时间信息
|
||||
EGame::__update(); // 更新游戏内容
|
||||
while (ETime::__isReady())
|
||||
{
|
||||
EInput::__updateDeviceState(); // 获取用户输入
|
||||
ESceneManager::__update(); // 更新场景内容
|
||||
ETime::__updateLast(); // 刷新时间信息
|
||||
}
|
||||
|
||||
if (!s_bPaused)
|
||||
{
|
||||
ETimerManager::__update(); // 定时器管理器执行程序
|
||||
EActionManager::__update(); // 动作管理器执行程序
|
||||
}
|
||||
|
||||
ERenderer::__render(); // 渲染游戏画面
|
||||
}
|
||||
else
|
||||
|
|
@ -159,8 +162,6 @@ void e2d::EGame::uninit()
|
|||
{
|
||||
// 删除所有场景
|
||||
ESceneManager::__uninit();
|
||||
// 重置窗口属性
|
||||
EWindow::__uninit();
|
||||
// 关闭输入
|
||||
EInput::__uninit();
|
||||
// 关闭播放器
|
||||
|
|
@ -169,27 +170,18 @@ void e2d::EGame::uninit()
|
|||
ETime::__uninit();
|
||||
// 清空图片缓存
|
||||
EImage::clearCache();
|
||||
// 删除渲染相关资源
|
||||
ERenderer::__discardResources();
|
||||
// 刷新内存池
|
||||
EObjectManager::__flush();
|
||||
// 删除渲染相关资源
|
||||
ERenderer::__discardResources();
|
||||
// 销毁窗口
|
||||
EWindow::__uninit();
|
||||
|
||||
CoUninitialize();
|
||||
|
||||
s_bInitialized = false;
|
||||
}
|
||||
|
||||
void e2d::EGame::__update()
|
||||
{
|
||||
if (s_bPaused)
|
||||
return;
|
||||
|
||||
EInput::__updateDeviceState(); // 获取用户输入
|
||||
ETimerManager::__update(); // 定时器管理器执行程序
|
||||
EActionManager::__update(); // 动作管理器执行程序
|
||||
ESceneManager::__update(); // 更新游戏内容
|
||||
}
|
||||
|
||||
e2d::EString e2d::EGame::getAppName()
|
||||
{
|
||||
return s_sAppName;
|
||||
|
|
|
|||
|
|
@ -1,9 +1,23 @@
|
|||
#include "..\ebase.h"
|
||||
#include <thread>
|
||||
#include <chrono>
|
||||
using namespace std::chrono;
|
||||
|
||||
|
||||
// 游戏开始时间
|
||||
static steady_clock::time_point s_tStart;
|
||||
// 当前时间
|
||||
static steady_clock::time_point s_tNow;
|
||||
// 上一帧刷新时间
|
||||
static steady_clock::time_point s_tFixedUpdate;
|
||||
// 上一次更新时间
|
||||
static steady_clock::time_point s_tLastUpdate;
|
||||
// 上一帧与当前帧的时间间隔
|
||||
static int s_nInterval = 0;
|
||||
// 游戏开始时长
|
||||
static float s_fTotalTime = 0;
|
||||
// 每一帧间隔
|
||||
static milliseconds s_tExceptedInvertal;
|
||||
|
||||
|
||||
float e2d::ETime::getTotalTime()
|
||||
|
|
@ -16,26 +30,10 @@ int e2d::ETime::getDeltaTime()
|
|||
return s_nInterval;
|
||||
}
|
||||
|
||||
|
||||
|
||||
#if _MSC_VER > 1600
|
||||
|
||||
#include <thread>
|
||||
#include <chrono>
|
||||
using namespace std::chrono;
|
||||
|
||||
|
||||
// 游戏开始时间
|
||||
static steady_clock::time_point s_tStart;
|
||||
// 当前时间
|
||||
static steady_clock::time_point s_tNow;
|
||||
// 上一帧刷新时间
|
||||
static steady_clock::time_point s_tLast;
|
||||
|
||||
|
||||
bool e2d::ETime::__init()
|
||||
{
|
||||
s_tStart = s_tLast = s_tNow = steady_clock::now();
|
||||
s_tStart = s_tLastUpdate = s_tFixedUpdate = s_tNow = steady_clock::now();
|
||||
s_tExceptedInvertal = milliseconds(17);
|
||||
return true;
|
||||
}
|
||||
|
||||
|
|
@ -43,93 +41,35 @@ void e2d::ETime::__uninit()
|
|||
{
|
||||
}
|
||||
|
||||
bool e2d::ETime::__isReady()
|
||||
{
|
||||
return s_tExceptedInvertal < duration_cast<milliseconds>(s_tNow - s_tFixedUpdate);
|
||||
}
|
||||
|
||||
void e2d::ETime::__updateNow()
|
||||
{
|
||||
// 刷新时间
|
||||
s_tNow = steady_clock::now();
|
||||
s_fTotalTime = static_cast<float>(duration_cast<milliseconds>(s_tNow - s_tStart).count()) / 1000.0f;
|
||||
s_nInterval = static_cast<int>(duration_cast<milliseconds>(s_tNow - s_tLast).count());
|
||||
}
|
||||
|
||||
void e2d::ETime::__updateLast()
|
||||
{
|
||||
s_tLast = s_tNow;
|
||||
s_tFixedUpdate += s_tExceptedInvertal;
|
||||
s_tLastUpdate = s_tNow;
|
||||
|
||||
s_tNow = steady_clock::now();
|
||||
s_nInterval = static_cast<int>(duration_cast<milliseconds>(s_tNow - s_tLastUpdate).count());
|
||||
s_fTotalTime = static_cast<float>(duration_cast<milliseconds>(s_tNow - s_tStart).count()) / 1000.0f;
|
||||
}
|
||||
|
||||
void e2d::ETime::__sleep()
|
||||
{
|
||||
// 计算挂起时长
|
||||
int nWaitMS = 16 - s_nInterval;
|
||||
// 挂起线程,释放 CPU 占用
|
||||
int nWaitMS = 16 - static_cast<int>(duration_cast<milliseconds>(s_tNow - s_tFixedUpdate).count());
|
||||
|
||||
if (nWaitMS > 1)
|
||||
{
|
||||
// 挂起线程,释放 CPU 占用
|
||||
std::this_thread::sleep_for(milliseconds(nWaitMS));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
#else
|
||||
|
||||
|
||||
#include <mmsystem.h>
|
||||
#pragma comment(lib, "winmm.lib")
|
||||
|
||||
// 时钟频率
|
||||
static LARGE_INTEGER s_tFreq;
|
||||
// 当前时间
|
||||
static LARGE_INTEGER s_tNow;
|
||||
// 游戏开始时间
|
||||
static LARGE_INTEGER s_tStart;
|
||||
// 上一帧画面绘制时间
|
||||
static LARGE_INTEGER s_tLast;
|
||||
|
||||
|
||||
|
||||
bool e2d::ETime::__init()
|
||||
{
|
||||
bool bRet = false;
|
||||
if (::timeBeginPeriod(1))
|
||||
{
|
||||
// 修改时间精度
|
||||
if (::QueryPerformanceFrequency(&s_tFreq)) // 获取时钟频率
|
||||
{
|
||||
|
||||
if (::QueryPerformanceCounter(&s_tNow)) // 刷新当前时间
|
||||
{
|
||||
s_tStart = s_tLast = s_tNow;
|
||||
bRet = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
return bRet;
|
||||
}
|
||||
|
||||
void e2d::ETime::__uninit()
|
||||
{
|
||||
::timeEndPeriod(1); // 重置时间精度
|
||||
}
|
||||
|
||||
void e2d::ETime::__updateNow()
|
||||
{
|
||||
::QueryPerformanceCounter(&s_tNow);
|
||||
s_fTotalTime = static_cast<float>(s_tNow.QuadPart - s_tStart.QuadPart) / s_tFreq.QuadPart;
|
||||
s_nInterval = static_cast<int>((s_tNow.QuadPart - s_tLast.QuadPart) * 1000LL / s_tFreq.QuadPart);
|
||||
}
|
||||
|
||||
void e2d::ETime::__updateLast()
|
||||
{
|
||||
s_tLast = s_tNow;
|
||||
}
|
||||
|
||||
void e2d::ETime::__sleep()
|
||||
{
|
||||
// 计算挂起时长
|
||||
int nWaitMS = 16 - s_nInterval;
|
||||
// 挂起线程,释放 CPU 占用
|
||||
if (nWaitMS > 1)
|
||||
{
|
||||
::Sleep(nWaitMS);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
#endif // _MSC_VER > 1600
|
||||
}
|
||||
|
|
@ -102,10 +102,14 @@ bool e2d::EWindow::__init(LPCTSTR sTitle, UINT32 nWidth, UINT32 nHeight, LPCTSTR
|
|||
|
||||
void e2d::EWindow::__uninit()
|
||||
{
|
||||
// 关闭控制台
|
||||
if (::GetConsoleWindow())
|
||||
{
|
||||
::FreeConsole();
|
||||
}
|
||||
// 关闭窗口
|
||||
DestroyWindow(s_HWnd);
|
||||
s_HWnd = nullptr;
|
||||
}
|
||||
|
||||
void e2d::EWindow::__poll()
|
||||
|
|
|
|||
|
|
@ -39,13 +39,21 @@ void e2d::EScene::_render()
|
|||
|
||||
void e2d::EScene::_update()
|
||||
{
|
||||
// 执行 onUpdate 函数
|
||||
if (m_bAutoUpdate)
|
||||
if (!EGame::isPaused())
|
||||
{
|
||||
this->onUpdate();
|
||||
// 执行 onUpdate 函数
|
||||
if (m_bAutoUpdate)
|
||||
{
|
||||
this->onUpdate();
|
||||
}
|
||||
// 更新根节点
|
||||
m_pRoot->_update(false);
|
||||
}
|
||||
else
|
||||
{
|
||||
// 更新根节点
|
||||
m_pRoot->_update(true);
|
||||
}
|
||||
// 更新根节点
|
||||
m_pRoot->_update();
|
||||
}
|
||||
|
||||
void e2d::EScene::setAutoUpdate(bool bAutoUpdate)
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
e2d::EButton::EButton()
|
||||
: m_Callback((const BtnClkCallback &)nullptr)
|
||||
, m_eStatus(EButton::NORMAL)
|
||||
, m_eBtnState(EButton::NORMAL)
|
||||
, m_bEnable(true)
|
||||
, m_bIsSelected(false)
|
||||
, m_pNormal(nullptr)
|
||||
|
|
@ -14,7 +14,7 @@ e2d::EButton::EButton()
|
|||
|
||||
e2d::EButton::EButton(ENode * normal, const BtnClkCallback & callback)
|
||||
: m_Callback((const BtnClkCallback &)nullptr)
|
||||
, m_eStatus(EButton::NORMAL)
|
||||
, m_eBtnState(EButton::NORMAL)
|
||||
, m_bEnable(true)
|
||||
, m_bIsSelected(false)
|
||||
, m_pNormal(nullptr)
|
||||
|
|
@ -28,7 +28,7 @@ e2d::EButton::EButton(ENode * normal, const BtnClkCallback & callback)
|
|||
|
||||
e2d::EButton::EButton(ENode * normal, ENode * selected, const BtnClkCallback & callback)
|
||||
: m_Callback((const BtnClkCallback &)nullptr)
|
||||
, m_eStatus(EButton::NORMAL)
|
||||
, m_eBtnState(EButton::NORMAL)
|
||||
, m_bEnable(true)
|
||||
, m_bIsSelected(false)
|
||||
, m_pNormal(nullptr)
|
||||
|
|
@ -43,7 +43,7 @@ e2d::EButton::EButton(ENode * normal, ENode * selected, const BtnClkCallback & c
|
|||
|
||||
e2d::EButton::EButton(ENode * normal, ENode * mouseover, ENode * selected, const BtnClkCallback & callback)
|
||||
: m_Callback((const BtnClkCallback &)nullptr)
|
||||
, m_eStatus(EButton::NORMAL)
|
||||
, m_eBtnState(EButton::NORMAL)
|
||||
, m_bEnable(true)
|
||||
, m_bIsSelected(false)
|
||||
, m_pNormal(nullptr)
|
||||
|
|
@ -59,7 +59,7 @@ e2d::EButton::EButton(ENode * normal, ENode * mouseover, ENode * selected, const
|
|||
|
||||
e2d::EButton::EButton(ENode * normal, ENode * mouseover, ENode * selected, ENode * disabled, const BtnClkCallback & callback)
|
||||
: m_Callback((const BtnClkCallback &)nullptr)
|
||||
, m_eStatus(EButton::NORMAL)
|
||||
, m_eBtnState(EButton::NORMAL)
|
||||
, m_bEnable(true)
|
||||
, m_bIsSelected(false)
|
||||
, m_pNormal(nullptr)
|
||||
|
|
@ -228,7 +228,7 @@ void e2d::EButton::onUpdate()
|
|||
{
|
||||
// 鼠标左键按下,且位于按钮内时,标记 m_bIsSelected 为 true
|
||||
m_bIsSelected = true;
|
||||
_setStatus(EButton::SELECTED);
|
||||
_setState(EButton::SELECTED);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
|
@ -237,25 +237,30 @@ void e2d::EButton::onUpdate()
|
|||
{
|
||||
if (pSelected->isPointIn(EInput::getMousePos()))
|
||||
{
|
||||
_setStatus(EButton::SELECTED);
|
||||
_setState(EButton::SELECTED);
|
||||
return;
|
||||
}
|
||||
}
|
||||
else if (m_pNormal->isPointIn(EInput::getMousePos()))
|
||||
{
|
||||
_setStatus(EButton::MOUSEOVER);
|
||||
_setState(EButton::MOUSEOVER);
|
||||
return;
|
||||
}
|
||||
|
||||
_setStatus(EButton::NORMAL);
|
||||
_setState(EButton::NORMAL);
|
||||
}
|
||||
}
|
||||
|
||||
void e2d::EButton::_setStatus(STATUS status)
|
||||
void e2d::EButton::onPause()
|
||||
{
|
||||
if (m_eStatus != status)
|
||||
this->onUpdate();
|
||||
}
|
||||
|
||||
void e2d::EButton::_setState(BTN_STATE state)
|
||||
{
|
||||
if (m_eBtnState != state)
|
||||
{
|
||||
m_eStatus = status;
|
||||
m_eBtnState = state;
|
||||
_updateVisiable();
|
||||
}
|
||||
}
|
||||
|
|
@ -269,11 +274,11 @@ void e2d::EButton::_updateVisiable()
|
|||
|
||||
if (m_bEnable)
|
||||
{
|
||||
if (m_eStatus == EButton::SELECTED && m_pSelected)
|
||||
if (m_eBtnState == EButton::SELECTED && m_pSelected)
|
||||
{
|
||||
m_pSelected->setVisiable(true);
|
||||
}
|
||||
else if (m_eStatus == EButton::MOUSEOVER && m_pMouseover)
|
||||
else if (m_eBtnState == EButton::MOUSEOVER && m_pMouseover)
|
||||
{
|
||||
m_pMouseover->setVisiable(true);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
e2d::EButtonToggle::EButtonToggle()
|
||||
: EButton()
|
||||
, m_bToggle(true)
|
||||
, m_bState(true)
|
||||
, m_pNormalOn(nullptr)
|
||||
, m_pMouseoverOn(nullptr)
|
||||
, m_pSelectedOn(nullptr)
|
||||
|
|
@ -16,7 +16,7 @@ e2d::EButtonToggle::EButtonToggle()
|
|||
|
||||
e2d::EButtonToggle::EButtonToggle(ENode * toggleOnNormal, ENode * toggleOffNormal, const BtnClkCallback & callback)
|
||||
: EButton()
|
||||
, m_bToggle(true)
|
||||
, m_bState(true)
|
||||
, m_pNormalOn(nullptr)
|
||||
, m_pMouseoverOn(nullptr)
|
||||
, m_pSelectedOn(nullptr)
|
||||
|
|
@ -33,7 +33,7 @@ e2d::EButtonToggle::EButtonToggle(ENode * toggleOnNormal, ENode * toggleOffNorma
|
|||
|
||||
e2d::EButtonToggle::EButtonToggle(ENode * toggleOnNormal, ENode * toggleOffNormal, ENode * toggleOnSelected, ENode * toggleOffSelected, const BtnClkCallback & callback)
|
||||
: EButton()
|
||||
, m_bToggle(true)
|
||||
, m_bState(true)
|
||||
, m_pNormalOn(nullptr)
|
||||
, m_pMouseoverOn(nullptr)
|
||||
, m_pSelectedOn(nullptr)
|
||||
|
|
@ -52,7 +52,7 @@ e2d::EButtonToggle::EButtonToggle(ENode * toggleOnNormal, ENode * toggleOffNorma
|
|||
|
||||
e2d::EButtonToggle::EButtonToggle(ENode * toggleOnNormal, ENode * toggleOffNormal, ENode * toggleOnMouseOver, ENode * toggleOffMouseOver, ENode * toggleOnSelected, ENode * toggleOffSelected, const BtnClkCallback & callback)
|
||||
: EButton()
|
||||
, m_bToggle(true)
|
||||
, m_bState(true)
|
||||
, m_pNormalOn(nullptr)
|
||||
, m_pMouseoverOn(nullptr)
|
||||
, m_pSelectedOn(nullptr)
|
||||
|
|
@ -73,7 +73,7 @@ e2d::EButtonToggle::EButtonToggle(ENode * toggleOnNormal, ENode * toggleOffNorma
|
|||
|
||||
e2d::EButtonToggle::EButtonToggle(ENode * toggleOnNormal, ENode * toggleOffNormal, ENode * toggleOnMouseOver, ENode * toggleOffMouseOver, ENode * toggleOnSelected, ENode * toggleOffSelected, ENode * toggleOnDisabled, ENode * toggleOffDisabled, const BtnClkCallback & callback)
|
||||
: EButton()
|
||||
, m_bToggle(true)
|
||||
, m_bState(true)
|
||||
, m_pNormalOn(nullptr)
|
||||
, m_pMouseoverOn(nullptr)
|
||||
, m_pSelectedOn(nullptr)
|
||||
|
|
@ -97,7 +97,7 @@ e2d::EButtonToggle::EButtonToggle(ENode * toggleOnNormal, ENode * toggleOffNorma
|
|||
void e2d::EButtonToggle::toggle()
|
||||
{
|
||||
// 设置按钮状态
|
||||
setToggle(!m_bToggle);
|
||||
setState(!m_bState);
|
||||
// 执行回调函数
|
||||
if (m_Callback)
|
||||
{
|
||||
|
|
@ -105,17 +105,17 @@ void e2d::EButtonToggle::toggle()
|
|||
}
|
||||
}
|
||||
|
||||
bool e2d::EButtonToggle::isToggleOn() const
|
||||
bool e2d::EButtonToggle::getState() const
|
||||
{
|
||||
return m_bToggle;
|
||||
return m_bState;
|
||||
}
|
||||
|
||||
void e2d::EButtonToggle::setToggle(bool toggle)
|
||||
void e2d::EButtonToggle::setState(bool bState)
|
||||
{
|
||||
if (m_bToggle != toggle)
|
||||
if (m_bState != bState)
|
||||
{
|
||||
m_bToggle = toggle;
|
||||
_updateToggle();
|
||||
m_bState = bState;
|
||||
_updateState();
|
||||
_updateVisiable();
|
||||
}
|
||||
}
|
||||
|
|
@ -133,10 +133,11 @@ void e2d::EButtonToggle::setNormal(ENode * normal)
|
|||
if (normal)
|
||||
{
|
||||
this->addChild(normal);
|
||||
normal->setPivot(m_fPivotX, m_fPivotY);
|
||||
}
|
||||
m_pNormalOn = normal;
|
||||
|
||||
_updateToggle();
|
||||
_updateState();
|
||||
_updateVisiable();
|
||||
}
|
||||
}
|
||||
|
|
@ -154,10 +155,11 @@ void e2d::EButtonToggle::setMouseOver(ENode * mouseover)
|
|||
if (mouseover)
|
||||
{
|
||||
this->addChild(mouseover);
|
||||
mouseover->setPivot(m_fPivotX, m_fPivotY);
|
||||
}
|
||||
m_pMouseoverOn = mouseover;
|
||||
|
||||
_updateToggle();
|
||||
_updateState();
|
||||
_updateVisiable();
|
||||
}
|
||||
}
|
||||
|
|
@ -175,10 +177,11 @@ void e2d::EButtonToggle::setSelected(ENode * selected)
|
|||
if (selected)
|
||||
{
|
||||
this->addChild(selected);
|
||||
selected->setPivot(m_fPivotX, m_fPivotY);
|
||||
}
|
||||
m_pSelectedOn = selected;
|
||||
|
||||
_updateToggle();
|
||||
_updateState();
|
||||
_updateVisiable();
|
||||
}
|
||||
}
|
||||
|
|
@ -196,10 +199,11 @@ void e2d::EButtonToggle::setDisabled(ENode * disabled)
|
|||
if (disabled)
|
||||
{
|
||||
this->addChild(disabled);
|
||||
disabled->setPivot(m_fPivotX, m_fPivotY);
|
||||
}
|
||||
m_pDisabledOn = disabled;
|
||||
|
||||
_updateToggle();
|
||||
_updateState();
|
||||
_updateVisiable();
|
||||
}
|
||||
}
|
||||
|
|
@ -217,10 +221,11 @@ void e2d::EButtonToggle::setNormalOff(ENode * normal)
|
|||
if (normal)
|
||||
{
|
||||
this->addChild(normal);
|
||||
normal->setPivot(m_fPivotX, m_fPivotY);
|
||||
}
|
||||
m_pNormalOff = normal;
|
||||
|
||||
_updateToggle();
|
||||
_updateState();
|
||||
_updateVisiable();
|
||||
}
|
||||
}
|
||||
|
|
@ -238,10 +243,11 @@ void e2d::EButtonToggle::setMouseOverOff(ENode * mouseover)
|
|||
if (mouseover)
|
||||
{
|
||||
this->addChild(mouseover);
|
||||
mouseover->setPivot(m_fPivotX, m_fPivotY);
|
||||
}
|
||||
m_pMouseoverOff = mouseover;
|
||||
|
||||
_updateToggle();
|
||||
_updateState();
|
||||
_updateVisiable();
|
||||
}
|
||||
}
|
||||
|
|
@ -259,10 +265,11 @@ void e2d::EButtonToggle::setSelectedOff(ENode * selected)
|
|||
if (selected)
|
||||
{
|
||||
this->addChild(selected);
|
||||
selected->setPivot(m_fPivotX, m_fPivotY);
|
||||
}
|
||||
m_pSelectedOff = selected;
|
||||
|
||||
_updateToggle();
|
||||
_updateState();
|
||||
_updateVisiable();
|
||||
}
|
||||
}
|
||||
|
|
@ -280,17 +287,57 @@ void e2d::EButtonToggle::setDisabledOff(ENode * disabled)
|
|||
if (disabled)
|
||||
{
|
||||
this->addChild(disabled);
|
||||
disabled->setPivot(m_fPivotX, m_fPivotY);
|
||||
}
|
||||
m_pDisabledOff = disabled;
|
||||
|
||||
_updateToggle();
|
||||
_updateState();
|
||||
_updateVisiable();
|
||||
}
|
||||
}
|
||||
|
||||
void e2d::EButtonToggle::_updateToggle()
|
||||
void e2d::EButtonToggle::setPivotX(float pivotX)
|
||||
{
|
||||
if (m_bToggle)
|
||||
ENode::setPivotX(pivotX);
|
||||
if (m_pNormalOn) m_pNormalOn->setPivotX(pivotX);
|
||||
if (m_pMouseoverOn) m_pMouseoverOn->setPivotX(pivotX);
|
||||
if (m_pSelectedOn) m_pSelectedOn->setPivotX(pivotX);
|
||||
if (m_pDisabledOn) m_pDisabledOn->setPivotX(pivotX);
|
||||
if (m_pNormalOff) m_pNormalOff->setPivotX(pivotX);
|
||||
if (m_pMouseoverOff) m_pMouseoverOff->setPivotX(pivotX);
|
||||
if (m_pSelectedOff) m_pSelectedOff->setPivotX(pivotX);
|
||||
if (m_pDisabledOff) m_pDisabledOff->setPivotX(pivotX);
|
||||
}
|
||||
|
||||
void e2d::EButtonToggle::setPivotY(float pivotY)
|
||||
{
|
||||
ENode::setPivotY(pivotY);
|
||||
if (m_pNormalOn) m_pNormalOn->setPivotY(pivotY);
|
||||
if (m_pMouseoverOn) m_pMouseoverOn->setPivotY(pivotY);
|
||||
if (m_pSelectedOn) m_pSelectedOn->setPivotY(pivotY);
|
||||
if (m_pDisabledOn) m_pDisabledOn->setPivotY(pivotY);
|
||||
if (m_pNormalOff) m_pNormalOff->setPivotY(pivotY);
|
||||
if (m_pMouseoverOff) m_pMouseoverOff->setPivotY(pivotY);
|
||||
if (m_pSelectedOff) m_pSelectedOff->setPivotY(pivotY);
|
||||
if (m_pDisabledOff) m_pDisabledOff->setPivotY(pivotY);
|
||||
}
|
||||
|
||||
void e2d::EButtonToggle::setPivot(float pivotX, float pivotY)
|
||||
{
|
||||
ENode::setPivot(pivotX, pivotY);
|
||||
if (m_pNormalOn) m_pNormalOn->setPivot(pivotX, pivotY);
|
||||
if (m_pMouseoverOn) m_pMouseoverOn->setPivot(pivotX, pivotY);
|
||||
if (m_pSelectedOn) m_pSelectedOn->setPivot(pivotX, pivotY);
|
||||
if (m_pDisabledOn) m_pDisabledOn->setPivot(pivotX, pivotY);
|
||||
if (m_pNormalOff) m_pNormalOff->setPivot(pivotX, pivotY);
|
||||
if (m_pMouseoverOff) m_pMouseoverOff->setPivot(pivotX, pivotY);
|
||||
if (m_pSelectedOff) m_pSelectedOff->setPivot(pivotX, pivotY);
|
||||
if (m_pDisabledOff) m_pDisabledOff->setPivot(pivotX, pivotY);
|
||||
}
|
||||
|
||||
void e2d::EButtonToggle::_updateState()
|
||||
{
|
||||
if (m_bState)
|
||||
{
|
||||
m_pNormal = m_pNormalOn;
|
||||
m_pMouseover = m_pMouseoverOn;
|
||||
|
|
@ -318,8 +365,8 @@ void e2d::EButtonToggle::_updateToggle()
|
|||
|
||||
void e2d::EButtonToggle::_runCallback()
|
||||
{
|
||||
m_bToggle = !m_bToggle;
|
||||
_updateToggle();
|
||||
m_bState = !m_bState;
|
||||
_updateState();
|
||||
|
||||
if (m_Callback)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -45,7 +45,7 @@ e2d::ENode::~ENode()
|
|||
}
|
||||
}
|
||||
|
||||
void e2d::ENode::_update()
|
||||
void e2d::ENode::_update(bool bPaused)
|
||||
{
|
||||
if (m_bTransformNeeded)
|
||||
{
|
||||
|
|
@ -77,7 +77,7 @@ void e2d::ENode::_update()
|
|||
// 访问 Order 小于零的节点
|
||||
if (child->getOrder() < 0)
|
||||
{
|
||||
child->_update();
|
||||
child->_update(bPaused);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
@ -85,20 +85,29 @@ void e2d::ENode::_update()
|
|||
}
|
||||
}
|
||||
|
||||
// 执行 onUpdate 函数
|
||||
if (m_bAutoUpdate)
|
||||
if (bPaused)
|
||||
{
|
||||
this->onPause();
|
||||
}
|
||||
else if (m_bAutoUpdate)
|
||||
{
|
||||
this->onUpdate();
|
||||
}
|
||||
|
||||
// 访问剩余节点
|
||||
for (; i < size; i++)
|
||||
m_vChildren[i]->_update();
|
||||
m_vChildren[i]->_update(bPaused);
|
||||
}
|
||||
else
|
||||
{
|
||||
// 执行 onUpdate 函数
|
||||
this->onUpdate();
|
||||
if (bPaused)
|
||||
{
|
||||
this->onPause();
|
||||
}
|
||||
else if (m_bAutoUpdate)
|
||||
{
|
||||
this->onUpdate();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -720,7 +729,7 @@ void e2d::ENode::runAction(EAction * action)
|
|||
{
|
||||
action = action->clone();
|
||||
}
|
||||
action->setTarget(this);
|
||||
action->_setTarget(this);
|
||||
EActionManager::addAction(action);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -253,6 +253,8 @@ void EMusic::_close()
|
|||
{
|
||||
if (m_pSourceVoice)
|
||||
{
|
||||
m_pSourceVoice->Stop();
|
||||
m_pSourceVoice->FlushSourceBuffers();
|
||||
m_pSourceVoice->DestroyVoice();
|
||||
m_pSourceVoice = nullptr;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -4,6 +4,7 @@
|
|||
namespace e2d
|
||||
{
|
||||
|
||||
class ENode;
|
||||
class EActionManager;
|
||||
class EActionTwo;
|
||||
class EActionLoop;
|
||||
|
|
@ -14,6 +15,7 @@ class ETransitionFade;
|
|||
class EAction :
|
||||
public EObject
|
||||
{
|
||||
friend ENode;
|
||||
friend EActionManager;
|
||||
friend EActionTwo;
|
||||
friend EActionLoop;
|
||||
|
|
@ -49,11 +51,6 @@ public:
|
|||
// 获取执行该动作的目标
|
||||
virtual ENode * getTarget();
|
||||
|
||||
// 设置动作执行目标
|
||||
virtual void setTarget(
|
||||
ENode * node
|
||||
);
|
||||
|
||||
protected:
|
||||
// 初始化动作
|
||||
virtual void _init();
|
||||
|
|
@ -70,6 +67,11 @@ protected:
|
|||
// 重置动画时间
|
||||
virtual void _resetTime();
|
||||
|
||||
// 设置动作执行目标
|
||||
virtual void _setTarget(
|
||||
ENode * node
|
||||
);
|
||||
|
||||
protected:
|
||||
bool m_bRunning;
|
||||
bool m_bEnding;
|
||||
|
|
@ -579,9 +581,9 @@ public:
|
|||
EImage * frame /* 添加关键帧 */
|
||||
);
|
||||
|
||||
// 设置每一帧的时间间隔(秒)
|
||||
// 设置每一帧的时间间隔
|
||||
void setInterval(
|
||||
float interval
|
||||
float interval /* 帧间隔(秒) */
|
||||
);
|
||||
|
||||
// 获取该动画的拷贝对象
|
||||
|
|
@ -600,9 +602,15 @@ protected:
|
|||
// 重置动作
|
||||
virtual void _reset() override;
|
||||
|
||||
// 设置动作执行目标
|
||||
virtual void _setTarget(
|
||||
ENode * node
|
||||
) override;
|
||||
|
||||
protected:
|
||||
float m_fInterval;
|
||||
UINT m_nFrameIndex;
|
||||
float m_fInterval;
|
||||
UINT m_nFrameIndex;
|
||||
ESprite* m_pTarget;
|
||||
std::vector<EImage*> m_vFrames;
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -41,10 +41,6 @@ public:
|
|||
|
||||
// 获取 AppName
|
||||
static EString getAppName();
|
||||
|
||||
private:
|
||||
// 更新游戏内容
|
||||
static void __update();
|
||||
};
|
||||
|
||||
|
||||
|
|
@ -129,6 +125,9 @@ private:
|
|||
// 重置计时操作
|
||||
static void __uninit();
|
||||
|
||||
// 是否达到更新时间
|
||||
static bool __isReady();
|
||||
|
||||
// 更新当前时间
|
||||
static void __updateNow();
|
||||
|
||||
|
|
|
|||
|
|
@ -634,8 +634,11 @@ public:
|
|||
// 重写这个函数,它将在每一帧画面刷新时执行
|
||||
virtual void onUpdate() {}
|
||||
|
||||
// 重写这个函数,它将在游戏暂停时执行
|
||||
virtual void onPause() {}
|
||||
|
||||
// 开启或禁用 onUpdate 函数
|
||||
virtual void setAutoUpdate(
|
||||
void setAutoUpdate(
|
||||
bool bAutoUpdate
|
||||
);
|
||||
|
||||
|
|
|
|||
149
core/enodes.h
149
core/enodes.h
|
|
@ -21,6 +21,12 @@ public:
|
|||
|
||||
virtual ~ENode();
|
||||
|
||||
// 进入场景时执行
|
||||
virtual void onEnter() {}
|
||||
|
||||
// 离开场景时执行
|
||||
virtual void onExit() {}
|
||||
|
||||
// 更新节点
|
||||
virtual void onUpdate() {}
|
||||
|
||||
|
|
@ -33,11 +39,11 @@ public:
|
|||
int nRelation /* 碰撞关系,取值为 ERelation::VALUE 中的一种 */
|
||||
) {}
|
||||
|
||||
// 进入场景时执行
|
||||
virtual void onEnter() {}
|
||||
// 游戏暂停时的处理
|
||||
virtual void onPause() {}
|
||||
|
||||
// 离开场景时执行
|
||||
virtual void onExit() {}
|
||||
// 节点被销毁时的处理
|
||||
virtual void onDestroy() {}
|
||||
|
||||
// 获取节点显示状态
|
||||
virtual bool isVisiable() const;
|
||||
|
|
@ -331,46 +337,48 @@ public:
|
|||
|
||||
protected:
|
||||
// 更新节点
|
||||
virtual void _update();
|
||||
void _update(
|
||||
bool bPaused
|
||||
);
|
||||
|
||||
// 渲染节点
|
||||
virtual void _render();
|
||||
void _render();
|
||||
|
||||
// 渲染几何图形
|
||||
virtual void _drawShape();
|
||||
// 渲染图形
|
||||
void _drawShape();
|
||||
|
||||
// 节点被添加到场景时的执行程序
|
||||
virtual void _onEnter();
|
||||
void _onEnter();
|
||||
|
||||
// 节点从场景中消失时的执行程序
|
||||
virtual void _onExit();
|
||||
void _onExit();
|
||||
|
||||
// 设置节点所在场景
|
||||
virtual void _setParentScene(
|
||||
void _setParentScene(
|
||||
EScene * scene
|
||||
);
|
||||
|
||||
// 对自身进行二维矩阵变换
|
||||
virtual void _updateTransform();
|
||||
void _updateTransform();
|
||||
|
||||
// 更新所有子节点矩阵
|
||||
virtual void _updateChildrenTransform();
|
||||
void _updateChildrenTransform();
|
||||
|
||||
// 更新所有子节点透明度
|
||||
virtual void _updateChildrenOpacity();
|
||||
void _updateChildrenOpacity();
|
||||
|
||||
// 更新节点矩阵
|
||||
// 修改节点大小
|
||||
void _setSize(
|
||||
float width,
|
||||
float height
|
||||
);
|
||||
|
||||
// 更新节点二维矩阵
|
||||
static void _updateTransform(ENode * node);
|
||||
|
||||
// 更新节点透明度
|
||||
static void _updateOpacity(ENode * node);
|
||||
|
||||
// 修改节点大小
|
||||
virtual void _setSize(
|
||||
float width,
|
||||
float height
|
||||
);
|
||||
|
||||
protected:
|
||||
EString m_sName;
|
||||
size_t m_nHashName;
|
||||
|
|
@ -624,13 +632,16 @@ public:
|
|||
) override;
|
||||
|
||||
// 更新按钮状态
|
||||
virtual void onUpdate();
|
||||
virtual void onUpdate() override;
|
||||
|
||||
// 更新游戏暂停时的按钮状态
|
||||
virtual void onPause() override;
|
||||
|
||||
protected:
|
||||
enum STATUS { NORMAL, MOUSEOVER, SELECTED };
|
||||
enum BTN_STATE { NORMAL, MOUSEOVER, SELECTED };
|
||||
|
||||
// 设置按钮状态
|
||||
virtual void _setStatus(STATUS status);
|
||||
virtual void _setState(BTN_STATE state);
|
||||
|
||||
// 刷新按钮显示
|
||||
virtual void _updateVisiable();
|
||||
|
|
@ -639,14 +650,14 @@ protected:
|
|||
virtual void _runCallback();
|
||||
|
||||
protected:
|
||||
STATUS m_eStatus;
|
||||
ENode * m_pNormal;
|
||||
ENode * m_pMouseover;
|
||||
ENode * m_pSelected;
|
||||
ENode * m_pDisabled;
|
||||
bool m_bEnable;
|
||||
bool m_bIsSelected;
|
||||
BtnClkCallback m_Callback;
|
||||
ENode * m_pNormal;
|
||||
ENode * m_pMouseover;
|
||||
ENode * m_pSelected;
|
||||
ENode * m_pDisabled;
|
||||
bool m_bEnable;
|
||||
bool m_bIsSelected;
|
||||
BTN_STATE m_eBtnState;
|
||||
BtnClkCallback m_Callback;
|
||||
};
|
||||
|
||||
|
||||
|
|
@ -659,54 +670,53 @@ public:
|
|||
|
||||
// 创建开关按钮
|
||||
EButtonToggle(
|
||||
ENode * toggleOnNormal,
|
||||
ENode * toggleOffNormal,
|
||||
ENode * onNormal,
|
||||
ENode * offNormal,
|
||||
const BtnClkCallback & callback = nullptr
|
||||
);
|
||||
|
||||
// 创建开关按钮
|
||||
EButtonToggle(
|
||||
ENode * toggleOnNormal,
|
||||
ENode * toggleOffNormal,
|
||||
ENode * toggleOnSelected,
|
||||
ENode * toggleOffSelected,
|
||||
ENode * onNormal,
|
||||
ENode * offNormal,
|
||||
ENode * onSelected,
|
||||
ENode * offSelected,
|
||||
const BtnClkCallback & callback = nullptr
|
||||
);
|
||||
|
||||
// 创建开关按钮
|
||||
EButtonToggle(
|
||||
ENode * toggleOnNormal,
|
||||
ENode * toggleOffNormal,
|
||||
ENode * toggleOnMouseOver,
|
||||
ENode * toggleOffMouseOver,
|
||||
ENode * toggleOnSelected,
|
||||
ENode * toggleOffSelected,
|
||||
ENode * onNormal,
|
||||
ENode * offNormal,
|
||||
ENode * onMouseOver,
|
||||
ENode * offMouseOver,
|
||||
ENode * onSelected,
|
||||
ENode * offSelected,
|
||||
const BtnClkCallback & callback = nullptr
|
||||
);
|
||||
|
||||
// 创建开关按钮
|
||||
EButtonToggle(
|
||||
ENode * toggleOnNormal,
|
||||
ENode * toggleOffNormal,
|
||||
ENode * toggleOnMouseOver,
|
||||
ENode * toggleOffMouseOver,
|
||||
ENode * toggleOnSelected,
|
||||
ENode * toggleOffSelected,
|
||||
ENode * toggleOnDisabled,
|
||||
ENode * toggleOffDisabled,
|
||||
ENode * onNormal,
|
||||
ENode * offNormal,
|
||||
ENode * onMouseOver,
|
||||
ENode * offMouseOver,
|
||||
ENode * onSelected,
|
||||
ENode * offSelected,
|
||||
ENode * onDisabled,
|
||||
ENode * offDisabled,
|
||||
const BtnClkCallback & callback = nullptr
|
||||
);
|
||||
|
||||
// 切换开关状态,并执行回调函数
|
||||
// 切换开关状态(执行回调函数)
|
||||
void toggle();
|
||||
|
||||
// 获取开关状态
|
||||
bool isToggleOn() const;
|
||||
bool getState() const;
|
||||
|
||||
// 打开或关闭开关
|
||||
// 仅设置按钮状态,不执行回调函数
|
||||
void setToggle(
|
||||
bool toggle
|
||||
// 设置开关按钮的状态(打开或关闭)
|
||||
void setState(
|
||||
bool bState
|
||||
);
|
||||
|
||||
// 设置按钮打开状态下显示的按钮
|
||||
|
|
@ -749,9 +759,28 @@ public:
|
|||
ENode * disabled
|
||||
);
|
||||
|
||||
// 设置中心点的横向位置
|
||||
// 默认为 0, 范围 [0, 1]
|
||||
virtual void setPivotX(
|
||||
float pivotX
|
||||
) override;
|
||||
|
||||
// 设置中心点的纵向位置
|
||||
// 默认为 0, 范围 [0, 1]
|
||||
virtual void setPivotY(
|
||||
float pivotY
|
||||
) override;
|
||||
|
||||
// 设置中心点位置
|
||||
// 默认为 (0, 0), 范围 [0, 1]
|
||||
virtual void setPivot(
|
||||
float pivotX,
|
||||
float pivotY
|
||||
) override;
|
||||
|
||||
protected:
|
||||
// 刷新按钮开关
|
||||
virtual void _updateToggle();
|
||||
virtual void _updateState();
|
||||
|
||||
// 执行按钮回调函数
|
||||
virtual void _runCallback() override;
|
||||
|
|
@ -765,7 +794,7 @@ protected:
|
|||
ENode * m_pSelectedOff;
|
||||
ENode * m_pDisabledOn;
|
||||
ENode * m_pDisabledOff;
|
||||
bool m_bToggle;
|
||||
bool m_bState;
|
||||
};
|
||||
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue