perfect the pause function.
This commit is contained in:
		
							parent
							
								
									f6eecee3aa
								
							
						
					
					
						commit
						6319ed7f2b
					
				|  | @ -45,14 +45,10 @@ 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; | ||||
| } | ||||
| } | ||||
| 
 | ||||
| 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()) | ||||
| 		{ | ||||
| 			while (ETime::__isReady()) | ||||
| 			{ | ||||
| 				EInput::__updateDeviceState();	// 获取用户输入
 | ||||
| 				ESceneManager::__update();		// 更新场景内容
 | ||||
| 				ETime::__updateLast();			// 刷新时间信息
 | ||||
| 			EGame::__update();			// 更新游戏内容
 | ||||
| 			} | ||||
| 
 | ||||
| 			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() | ||||
|  |  | |||
|  | @ -38,6 +38,8 @@ void e2d::EScene::_render() | |||
| } | ||||
| 
 | ||||
| void e2d::EScene::_update() | ||||
| { | ||||
| 	if (!EGame::isPaused()) | ||||
| 	{ | ||||
| 		// 执行 onUpdate 函数
 | ||||
| 		if (m_bAutoUpdate) | ||||
|  | @ -45,7 +47,13 @@ void e2d::EScene::_update() | |||
| 			this->onUpdate(); | ||||
| 		} | ||||
| 		// 更新根节点
 | ||||
| 	m_pRoot->_update(); | ||||
| 		m_pRoot->_update(false); | ||||
| 	} | ||||
| 	else | ||||
| 	{ | ||||
| 		// 更新根节点
 | ||||
| 		m_pRoot->_update(true); | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| 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) | ||||
| { | ||||
| 		m_eStatus = status; | ||||
| 	if (m_eBtnState != state) | ||||
| 	{ | ||||
| 		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,22 +85,31 @@ 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 函数
 | ||||
| 		if (bPaused) | ||||
| 		{ | ||||
| 			this->onPause(); | ||||
| 		} | ||||
| 		else if (m_bAutoUpdate) | ||||
| 		{ | ||||
| 			this->onUpdate(); | ||||
| 		} | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| void e2d::ENode::_render() | ||||
| { | ||||
|  | @ -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; | ||||
| 	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 | ||||
| 	); | ||||
| 
 | ||||
|  |  | |||
							
								
								
									
										135
									
								
								core/enodes.h
								
								
								
								
							
							
						
						
									
										135
									
								
								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,13 +650,13 @@ 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; | ||||
| 	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