修复了部分场景切换动画的显示bug
This commit is contained in:
		
							parent
							
								
									4dfa00e97f
								
							
						
					
					
						commit
						d5a45b3b01
					
				|  | @ -11,22 +11,21 @@ int WINAPI WinMain( | ||||||
| 	if (!EApp::init(L"Easy2D Demo", 640, 480)) | 	if (!EApp::init(L"Easy2D Demo", 640, 480)) | ||||||
| 		return -1; | 		return -1; | ||||||
| 
 | 
 | ||||||
| 	float w = EApp::getWidth(); |  | ||||||
| 	float h = EApp::getHeight(); |  | ||||||
| 	auto scene = new EScene(); | 	auto scene = new EScene(); | ||||||
|  | 	scene->retain(); | ||||||
| 
 | 
 | ||||||
| 	auto text = new EText(L"中文测试中文测试中文测试中文测试中文测试中文测试中文测试", L"楷体"); | 	auto text = new EText(L"中文测试中文测试中文测试中文测试中文测试中文测试中文测试", L"楷体"); | ||||||
| 	text->setPos(EApp::getWidth() / 2, EApp::getHeight() / 2); | 	text->setPos(EApp::getWidth() / 2, EApp::getHeight() / 2); | ||||||
| 	//text->setWordWrapping(true);
 | 	//text->setWordWrapping(true);
 | ||||||
| 	//text->setWordWrappingWidth(130);
 | 	//text->setWordWrappingWidth(130);
 | ||||||
| 	text->setRotation(40); | 	text->setRotation(40); | ||||||
| 	//text->runAction(new EActionLoop(new EActionTwo(new EActionFadeOut(1), new EActionFadeIn(1))));
 | 	text->runAction(new EActionLoop(new EActionTwo(new EActionFadeOut(1), new EActionFadeIn(1)))); | ||||||
| 	scene->add(text); | 	scene->add(text); | ||||||
| 
 | 
 | ||||||
| 	auto listener = new EListenerKeyboardPress([=]() { | 	auto listener = new EListenerKeyboardPress([=]() { | ||||||
| 		if (EKeyboardMsg::getKeyValue() == EKeyboardMsg::KEY::SPACE) | 		if (EKeyboardMsg::getKeyValue() == EKeyboardMsg::KEY::SPACE) | ||||||
| 		{ | 		{ | ||||||
| 			EApp::backScene(new ETransitionFade(0.5f, 0.5f)); | 			EApp::backScene(new ETransitionMove(0.5f, ETransitionMove::DOWN)); | ||||||
| 		} | 		} | ||||||
| 	}); | 	}); | ||||||
| 	listener->bindWith(scene); | 	listener->bindWith(scene); | ||||||
|  | @ -48,28 +47,30 @@ int WINAPI WinMain( | ||||||
| 	auto btnStartSelected = new ESprite(L"atlas.png", 702, 234, 116, 70); | 	auto btnStartSelected = new ESprite(L"atlas.png", 702, 234, 116, 70); | ||||||
| 	btnStartSelected->setPosY(5); | 	btnStartSelected->setPosY(5); | ||||||
| 	auto button = new EButton(btnStart, btnStartSelected, [=] { | 	auto button = new EButton(btnStart, btnStartSelected, [=] { | ||||||
| 		if (EApp::isPaused()) | 		/*if (EApp::isPaused())
 | ||||||
| 		{ | 		{ | ||||||
| 			EApp::resume(); | 			EApp::resume(); | ||||||
| 		} | 		} | ||||||
| 		else | 		else | ||||||
| 		{ | 		{ | ||||||
| 			EApp::pause(); | 			EApp::pause(); | ||||||
| 		} | 		}*/ | ||||||
| 		//EApp::enterScene(scene, new ETransitionScaleEmerge(1, ETransitionScaleEmerge::BACK));
 | 		EApp::enterScene(scene, new ETransitionMove(1, ETransitionMove::RIGHT)); | ||||||
| 	}); | 	}); | ||||||
| 	button->setPivot(0.5f, 0.5f); | 	button->setPivot(0.5f, 0.5f); | ||||||
| 	button->setPos(EApp::getWidth() / 2, EApp::getHeight() / 2 + 100); | 	button->setPos(EApp::getWidth() / 2, EApp::getHeight() / 2 + 100); | ||||||
| 	scene2->add(button); | 	scene2->add(button); | ||||||
| 
 | 
 | ||||||
| 	scene2->runAction(new EActionSequence(5, | 	EMusicUtils::playMusic(L"music.wav", -1); | ||||||
|  | 
 | ||||||
|  | 	/*scene2->runAction(new EActionSequence(5,
 | ||||||
| 		new EActionCallback([]() { EMusicUtils::playMusic(L"music.wav", -1); }), | 		new EActionCallback([]() { EMusicUtils::playMusic(L"music.wav", -1); }), | ||||||
| 		new EActionDelay(3), | 		new EActionDelay(3), | ||||||
| 		new EActionCallback([]() { EMusicUtils::pauseMusic(L"music.wav"); }), | 		new EActionCallback([]() { EMusicUtils::pauseMusic(L"music.wav"); }), | ||||||
| 		new EActionDelay(10), | 		new EActionDelay(10), | ||||||
| 		new EActionCallback([]() { EMusicUtils::resumeMusic(L"music.wav"); }))); | 		new EActionCallback([]() { EMusicUtils::resumeMusic(L"music.wav"); })));*/ | ||||||
| 
 | 
 | ||||||
| 	EApp::enterScene(scene2, new ETransitionFade(0, 1)); | 	EApp::enterScene(scene2, new ETransitionMove(1, ETransitionMove::UP)); | ||||||
| 
 | 
 | ||||||
| 	return EApp::run(); | 	return EApp::run(); | ||||||
| } | } | ||||||
|  |  | ||||||
|  | @ -25,11 +25,11 @@ e2d::EApp::EApp() | ||||||
| 	: m_bEnd(false) | 	: m_bEnd(false) | ||||||
| 	, m_bPaused(false) | 	, m_bPaused(false) | ||||||
| 	, m_bManualPaused(false) | 	, m_bManualPaused(false) | ||||||
| 	, m_bTransitional(false) |  | ||||||
| 	, m_bTopMost(false) | 	, m_bTopMost(false) | ||||||
| 	, m_bShowConsole(false) | 	, m_bShowConsole(false) | ||||||
| 	, m_nAnimationInterval(17LL) | 	, m_nAnimationInterval(17LL) | ||||||
| 	, m_ClearColor(EColor::BLACK) | 	, m_ClearColor(EColor::BLACK) | ||||||
|  | 	, m_pTransition(nullptr) | ||||||
| 	, m_pCurrentScene(nullptr) | 	, m_pCurrentScene(nullptr) | ||||||
| 	, m_pNextScene(nullptr) | 	, m_pNextScene(nullptr) | ||||||
| { | { | ||||||
|  | @ -337,14 +337,17 @@ void e2d::EApp::_update() | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	// 正在切换场景时,执行场景切换动画
 | 	// 正在切换场景时,执行场景切换动画
 | ||||||
| 	if (m_bTransitional) | 	if (m_pTransition) | ||||||
| 	{ | 	{ | ||||||
| 		EActionManager::ActionProc(); | 		m_pTransition->_update(); | ||||||
| 		// 若场景切换未结束,不执行后面的部分
 | 		if (m_pTransition->isEnding()) | ||||||
| 		if (m_bTransitional) |  | ||||||
| 		{ | 		{ | ||||||
| 			return; | 			m_pTransition->release(); | ||||||
|  | 			m_pTransition = nullptr; | ||||||
|  | 			// ½øÈëÏÂÒ»³¡¾°
 | ||||||
|  | 			_enterNextScene(); | ||||||
| 		} | 		} | ||||||
|  | 		return; | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	// 下一场景指针不为空时,切换场景
 | 	// 下一场景指针不为空时,切换场景
 | ||||||
|  | @ -376,7 +379,7 @@ void e2d::EApp::_render() | ||||||
| 		m_pCurrentScene->_render(); | 		m_pCurrentScene->_render(); | ||||||
| 	} | 	} | ||||||
| 	// 切换场景时,同时绘制两场景
 | 	// 切换场景时,同时绘制两场景
 | ||||||
| 	if (m_bTransitional && m_pNextScene) | 	if (m_pTransition && m_pNextScene) | ||||||
| 	{ | 	{ | ||||||
| 		m_pNextScene->_render(); | 		m_pNextScene->_render(); | ||||||
| 	} | 	} | ||||||
|  | @ -447,8 +450,9 @@ e2d::ESize e2d::EApp::getSize() | ||||||
| 	return ESize(GetRenderTarget()->GetSize().width, GetRenderTarget()->GetSize().height); | 	return ESize(GetRenderTarget()->GetSize().width, GetRenderTarget()->GetSize().height); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void e2d::EApp::enterScene(EScene * scene, bool saveCurrentScene /* = true */, ETransition * transition /* = nullptr */) | void e2d::EApp::enterScene(EScene * scene, ETransition * transition /* = nullptr */, bool saveCurrentScene /* = true */) | ||||||
| { | { | ||||||
|  | 	ASSERT(scene != nullptr, "Next scene NULL pointer exception!"); | ||||||
| 	scene->retain(); | 	scene->retain(); | ||||||
| 	// 保存下一场景的指针
 | 	// 保存下一场景的指针
 | ||||||
| 	getInstance()->m_pNextScene = scene; | 	getInstance()->m_pNextScene = scene; | ||||||
|  | @ -460,17 +464,13 @@ void e2d::EApp::enterScene(EScene * scene, bool saveCurrentScene /* = true */, E | ||||||
| 	// 设置切换场景动画
 | 	// 设置切换场景动画
 | ||||||
| 	if (transition) | 	if (transition) | ||||||
| 	{ | 	{ | ||||||
| 		getInstance()->m_bTransitional = true; | 		getInstance()->m_pTransition = transition; | ||||||
|  | 		transition->retain(); | ||||||
| 		transition->_setTarget( | 		transition->_setTarget( | ||||||
| 			getInstance()->m_pCurrentScene,  | 			getInstance()->m_pCurrentScene,  | ||||||
| 			getInstance()->m_pNextScene,  | 			getInstance()->m_pNextScene | ||||||
| 			getInstance()->m_bTransitional |  | ||||||
| 		); | 		); | ||||||
| 	} | 	} | ||||||
| 	else |  | ||||||
| 	{ |  | ||||||
| 		getInstance()->m_bTransitional = false; |  | ||||||
| 	} |  | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void e2d::EApp::backScene(ETransition * transition /* = nullptr */) | void e2d::EApp::backScene(ETransition * transition /* = nullptr */) | ||||||
|  | @ -492,19 +492,13 @@ void e2d::EApp::backScene(ETransition * transition /* = nullptr */) | ||||||
| 	// 设置切换场景动画
 | 	// 设置切换场景动画
 | ||||||
| 	if (transition) | 	if (transition) | ||||||
| 	{ | 	{ | ||||||
| 		getInstance()->m_bTransitional = true; | 		getInstance()->m_pTransition = transition; | ||||||
|  | 		transition->retain(); | ||||||
| 		transition->_setTarget( | 		transition->_setTarget( | ||||||
| 			getInstance()->m_pCurrentScene,  | 			getInstance()->m_pCurrentScene,  | ||||||
| 			getInstance()->m_pNextScene,  | 			getInstance()->m_pNextScene | ||||||
| 			getInstance()->m_bTransitional |  | ||||||
| 		); | 		); | ||||||
| 	} | 	} | ||||||
| 	else |  | ||||||
| 	{ |  | ||||||
| 		// 把这个变量赋为 false,场景将在下一帧画面
 |  | ||||||
| 		// 进行切换
 |  | ||||||
| 		getInstance()->m_bTransitional = false; |  | ||||||
| 	} |  | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void e2d::EApp::clearScene() | void e2d::EApp::clearScene() | ||||||
|  | @ -650,7 +644,7 @@ LRESULT e2d::EApp::WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam | ||||||
| 		case WM_MOUSEWHEEL: | 		case WM_MOUSEWHEEL: | ||||||
| 		{ | 		{ | ||||||
| 			// 执行场景切换时屏蔽按键和鼠标消息
 | 			// 执行场景切换时屏蔽按键和鼠标消息
 | ||||||
| 			if (!s_pInstance->m_bTransitional && !s_pInstance->m_pNextScene) | 			if (!s_pInstance->m_pTransition && !s_pInstance->m_pNextScene) | ||||||
| 			{ | 			{ | ||||||
| 				EMsgManager::MouseProc(message, wParam, lParam); | 				EMsgManager::MouseProc(message, wParam, lParam); | ||||||
| 			} | 			} | ||||||
|  | @ -663,7 +657,7 @@ LRESULT e2d::EApp::WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam | ||||||
| 		case WM_KEYUP: | 		case WM_KEYUP: | ||||||
| 		{ | 		{ | ||||||
| 			// 执行场景切换时屏蔽按键和鼠标消息
 | 			// 执行场景切换时屏蔽按键和鼠标消息
 | ||||||
| 			if (!s_pInstance->m_bTransitional && !s_pInstance->m_pNextScene) | 			if (!s_pInstance->m_pTransition && !s_pInstance->m_pNextScene) | ||||||
| 			{ | 			{ | ||||||
| 				EMsgManager::KeyboardProc(message, wParam, lParam); | 				EMsgManager::KeyboardProc(message, wParam, lParam); | ||||||
| 			} | 			} | ||||||
|  |  | ||||||
|  | @ -245,11 +245,10 @@ | ||||||
|     <ClCompile Include="Tool\EMusicUtils.cpp" /> |     <ClCompile Include="Tool\EMusicUtils.cpp" /> | ||||||
|     <ClCompile Include="Tool\ERandom.cpp" /> |     <ClCompile Include="Tool\ERandom.cpp" /> | ||||||
|     <ClCompile Include="Tool\ETimer.cpp" /> |     <ClCompile Include="Tool\ETimer.cpp" /> | ||||||
|  |     <ClCompile Include="Transition\ETransition.cpp" /> | ||||||
|     <ClCompile Include="Transition\ETransitionEmerge.cpp" /> |     <ClCompile Include="Transition\ETransitionEmerge.cpp" /> | ||||||
|     <ClCompile Include="Transition\ETransitionFade.cpp" /> |     <ClCompile Include="Transition\ETransitionFade.cpp" /> | ||||||
|     <ClCompile Include="Transition\ETransitionMove.cpp" /> |     <ClCompile Include="Transition\ETransitionMove.cpp" /> | ||||||
|     <ClCompile Include="Transition\ETransitionScale.cpp" /> |  | ||||||
|     <ClCompile Include="Transition\ETransitionScaleEmerge.cpp" /> |  | ||||||
|     <ClCompile Include="Win\MciPlayer.cpp" /> |     <ClCompile Include="Win\MciPlayer.cpp" /> | ||||||
|     <ClCompile Include="Win\winbase.cpp" /> |     <ClCompile Include="Win\winbase.cpp" /> | ||||||
|   </ItemGroup> |   </ItemGroup> | ||||||
|  |  | ||||||
|  | @ -135,12 +135,6 @@ | ||||||
|     <ClCompile Include="Transition\ETransitionMove.cpp"> |     <ClCompile Include="Transition\ETransitionMove.cpp"> | ||||||
|       <Filter>Transition</Filter> |       <Filter>Transition</Filter> | ||||||
|     </ClCompile> |     </ClCompile> | ||||||
|     <ClCompile Include="Transition\ETransitionScale.cpp"> |  | ||||||
|       <Filter>Transition</Filter> |  | ||||||
|     </ClCompile> |  | ||||||
|     <ClCompile Include="Transition\ETransitionScaleEmerge.cpp"> |  | ||||||
|       <Filter>Transition</Filter> |  | ||||||
|     </ClCompile> |  | ||||||
|     <ClCompile Include="Tool\ETimer.cpp"> |     <ClCompile Include="Tool\ETimer.cpp"> | ||||||
|       <Filter>Tool</Filter> |       <Filter>Tool</Filter> | ||||||
|     </ClCompile> |     </ClCompile> | ||||||
|  | @ -219,6 +213,9 @@ | ||||||
|     <ClCompile Include="Win\MciPlayer.cpp"> |     <ClCompile Include="Win\MciPlayer.cpp"> | ||||||
|       <Filter>Win</Filter> |       <Filter>Win</Filter> | ||||||
|     </ClCompile> |     </ClCompile> | ||||||
|  |     <ClCompile Include="Transition\ETransition.cpp"> | ||||||
|  |       <Filter>Transition</Filter> | ||||||
|  |     </ClCompile> | ||||||
|   </ItemGroup> |   </ItemGroup> | ||||||
|   <ItemGroup> |   <ItemGroup> | ||||||
|     <ClInclude Include="Win\winbase.h"> |     <ClInclude Include="Win\winbase.h"> | ||||||
|  |  | ||||||
|  | @ -0,0 +1,52 @@ | ||||||
|  | #include "..\etransitions.h" | ||||||
|  | #include "..\Win\winbase.h" | ||||||
|  | 
 | ||||||
|  | e2d::ETransition::ETransition(float duration) | ||||||
|  | 	: m_bEnd(false) | ||||||
|  | 	, m_fTotalDuration(duration * 1000) | ||||||
|  | 	, m_fDuration(0) | ||||||
|  | 	, m_fRateOfProgress(0) | ||||||
|  | 	, m_pPrevScene(nullptr) | ||||||
|  | 	, m_pNextScene(nullptr) | ||||||
|  | { | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | bool e2d::ETransition::isEnding() | ||||||
|  | { | ||||||
|  | 	return m_bEnd; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | bool e2d::ETransition::_isDelayEnough() | ||||||
|  | { | ||||||
|  | 	// 判断时间间隔是否足够
 | ||||||
|  | 	if (m_fTotalDuration == 0) | ||||||
|  | 	{ | ||||||
|  | 		m_fRateOfProgress = 1; | ||||||
|  | 		return true; | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	if (GetInterval(m_tLast) > 15) | ||||||
|  | 	{ | ||||||
|  | 		// 重新记录时间
 | ||||||
|  | 		m_tLast += milliseconds(15); | ||||||
|  | 		m_fDuration += 15; | ||||||
|  | 		// 计算动画进度
 | ||||||
|  | 		m_fRateOfProgress = m_fDuration / m_fTotalDuration; | ||||||
|  | 		return true; | ||||||
|  | 	} | ||||||
|  | 	return false; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | void e2d::ETransition::_stop() | ||||||
|  | { | ||||||
|  | 	m_bEnd = true; | ||||||
|  | 	_reset(); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | void e2d::ETransition::_setTarget(EScene * prev, EScene * next) | ||||||
|  | { | ||||||
|  | 	m_tLast = std::chrono::steady_clock::now(); | ||||||
|  | 	m_pPrevScene = prev; | ||||||
|  | 	m_pNextScene = next; | ||||||
|  | 	_init(); | ||||||
|  | } | ||||||
|  | @ -1,39 +1,33 @@ | ||||||
| #include "..\etransitions.h" | #include "..\etransitions.h" | ||||||
| #include "..\eactions.h" | #include "..\enodes.h" | ||||||
| #include "..\emanagers.h" |  | ||||||
| 
 | 
 | ||||||
| e2d::ETransitionEmerge::ETransitionEmerge(float emergeDuration) | e2d::ETransitionEmerge::ETransitionEmerge(float duration) | ||||||
| 	: m_fEmergeDuration(emergeDuration) | 	: ETransition(duration) | ||||||
| { | { | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void e2d::ETransitionEmerge::_setTarget(EScene * prev, EScene * next, bool & transitional) | void e2d::ETransitionEmerge::_update() | ||||||
| { | { | ||||||
| 	// 初始化场景属性
 | 	if (_isDelayEnough()) | ||||||
| 	next->getRoot()->setOpacity(0); |  | ||||||
| 
 |  | ||||||
| 	// 第一个场景淡出
 |  | ||||||
| 	auto action1 = new EActionFadeOut(m_fEmergeDuration); |  | ||||||
| 	if (prev) |  | ||||||
| 	{ | 	{ | ||||||
| 		action1->setTarget(prev->getRoot()); | 		if (m_pPrevScene) m_pPrevScene->getRoot()->setOpacity(1 - m_fRateOfProgress); | ||||||
| 	} | 		m_pNextScene->getRoot()->setOpacity(m_fRateOfProgress); | ||||||
| 
 | 
 | ||||||
| 	// 第二个场景淡入
 | 		if (m_fDuration >= m_fTotalDuration) | ||||||
| 	auto action2 = new EActionFadeIn(m_fEmergeDuration); |  | ||||||
| 	action2->setTarget(next->getRoot()); |  | ||||||
| 
 |  | ||||||
| 	// 标志动画结束
 |  | ||||||
| 	auto action3 = new EActionCallback([&, prev, next] { |  | ||||||
| 		transitional = false; |  | ||||||
| 		// 还原场景状态
 |  | ||||||
| 		if (prev) |  | ||||||
| 		{ | 		{ | ||||||
| 			prev->getRoot()->setOpacity(1); | 			this->_stop(); | ||||||
|  | 		} | ||||||
| 	} | 	} | ||||||
| 		next->getRoot()->setOpacity(1); | } | ||||||
| 	}); | 
 | ||||||
| 
 | void e2d::ETransitionEmerge::_init() | ||||||
| 	// 添加顺序动作
 | { | ||||||
| 	EActionManager::addAction(new EActionSequence(2, new EActionTwoAtSameTime(action1, action2), action3)); | 	if (m_pPrevScene) m_pPrevScene->getRoot()->setOpacity(1); | ||||||
|  | 	m_pNextScene->getRoot()->setOpacity(0); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | void e2d::ETransitionEmerge::_reset() | ||||||
|  | { | ||||||
|  | 	if (m_pPrevScene) m_pPrevScene->getRoot()->setOpacity(1); | ||||||
|  | 	m_pNextScene->getRoot()->setOpacity(1); | ||||||
| } | } | ||||||
|  |  | ||||||
|  | @ -1,40 +1,57 @@ | ||||||
| #include "..\etransitions.h" | #include "..\etransitions.h" | ||||||
| #include "..\eactions.h" | #include "..\enodes.h" | ||||||
| #include "..\emanagers.h" |  | ||||||
| 
 | 
 | ||||||
| e2d::ETransitionFade::ETransitionFade(float fadeOutDuration, float fadeInDuration) | e2d::ETransitionFade::ETransitionFade(float fadeOutDuration, float fadeInDuration) | ||||||
| 	: m_fFadeOutDuration(fadeOutDuration) | 	: ETransition(0) | ||||||
| 	, m_fFadeInDuration(fadeInDuration) | 	, m_fFadeOutDuration(fadeOutDuration * 1000) | ||||||
|  | 	, m_fFadeInDuration(fadeInDuration * 1000) | ||||||
|  | 	, m_bFadeOutTransioning(true) | ||||||
| { | { | ||||||
|  | 	m_fTotalDuration = m_fFadeOutDuration; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void e2d::ETransitionFade::_setTarget(EScene * prev, EScene * next, bool & transitional) | void e2d::ETransitionFade::_update() | ||||||
| { | { | ||||||
| 	// 初始化场景属性
 | 	if (_isDelayEnough()) | ||||||
| 	next->getRoot()->setOpacity(0); |  | ||||||
| 
 |  | ||||||
| 	// 第一个场景淡出
 |  | ||||||
| 	auto action1 = new EActionFadeOut(m_fFadeOutDuration); |  | ||||||
| 	if (prev) |  | ||||||
| 	{ | 	{ | ||||||
| 		action1->setTarget(prev->getRoot()); | 		if (m_bFadeOutTransioning) | ||||||
| 	} |  | ||||||
| 	 |  | ||||||
| 	// 第二个场景淡入
 |  | ||||||
| 	auto action2 = new EActionFadeIn(m_fFadeInDuration); |  | ||||||
| 	action2->setTarget(next->getRoot()); |  | ||||||
| 
 |  | ||||||
| 	// 标志动画结束
 |  | ||||||
| 	auto action3 = new EActionCallback([&, prev, next] { |  | ||||||
| 		transitional = false; |  | ||||||
| 		// 还原场景状态
 |  | ||||||
| 		if (prev) |  | ||||||
| 		{ | 		{ | ||||||
| 			prev->getRoot()->setOpacity(1); | 			m_pPrevScene->getRoot()->setOpacity(1 - m_fRateOfProgress); | ||||||
|  | 			if (m_fDuration >= m_fTotalDuration) | ||||||
|  | 			{ | ||||||
|  | 				m_bFadeOutTransioning = false; | ||||||
|  | 				m_fTotalDuration = m_fFadeInDuration; | ||||||
|  | 				m_fDuration = 0; | ||||||
|  | 			} | ||||||
|  | 		} | ||||||
|  | 		else | ||||||
|  | 		{ | ||||||
|  | 			m_pNextScene->getRoot()->setOpacity(m_fRateOfProgress); | ||||||
|  | 			if (m_fDuration >= m_fTotalDuration) | ||||||
|  | 			{ | ||||||
|  | 				this->_stop(); | ||||||
|  | 			} | ||||||
|  | 		} | ||||||
| 	} | 	} | ||||||
| 		next->getRoot()->setOpacity(1); | } | ||||||
| 	}); | 
 | ||||||
| 
 | void e2d::ETransitionFade::_init() | ||||||
| 	// 添加顺序动作
 | { | ||||||
| 	EActionManager::addAction(new EActionSequence(3, action1, action2, action3)); | 	if (m_pPrevScene) | ||||||
|  | 	{ | ||||||
|  | 		m_bFadeOutTransioning = true; | ||||||
|  | 		m_pPrevScene->getRoot()->setOpacity(1); | ||||||
|  | 	} | ||||||
|  | 	else | ||||||
|  | 	{ | ||||||
|  | 		m_bFadeOutTransioning = false; | ||||||
|  | 		m_fTotalDuration = m_fFadeInDuration; | ||||||
|  | 	} | ||||||
|  | 	m_pNextScene->getRoot()->setOpacity(0); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | void e2d::ETransitionFade::_reset() | ||||||
|  | { | ||||||
|  | 	if (m_pPrevScene) m_pPrevScene->getRoot()->setOpacity(1); | ||||||
|  | 	m_pNextScene->getRoot()->setOpacity(1); | ||||||
| } | } | ||||||
|  | @ -1,64 +1,56 @@ | ||||||
| #include "..\etransitions.h" | #include "..\etransitions.h" | ||||||
| #include "..\eactions.h" | #include "..\enodes.h" | ||||||
| #include "..\emanagers.h" |  | ||||||
| 
 | 
 | ||||||
| e2d::ETransitionMove::ETransitionMove(float moveDuration, MOVE_DIRECT direct) | e2d::ETransitionMove::ETransitionMove(float duration, MOVE_DIRECT direct) | ||||||
| 	: m_fMoveDuration(moveDuration) | 	: ETransition(duration) | ||||||
| 	, m_Direct(direct) | 	, m_Direct(direct) | ||||||
| { | { | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void e2d::ETransitionMove::_setTarget(EScene * prev, EScene * next, bool & transitional) | void e2d::ETransitionMove::_update() | ||||||
|  | { | ||||||
|  | 	if (_isDelayEnough()) | ||||||
|  | 	{ | ||||||
|  | 		if (m_pPrevScene) m_pPrevScene->getRoot()->setPos(m_Vec * m_fRateOfProgress); | ||||||
|  | 		m_pNextScene->getRoot()->setPos(m_NextPos + m_Vec * m_fRateOfProgress); | ||||||
|  | 
 | ||||||
|  | 		if (m_fDuration >= m_fTotalDuration) | ||||||
|  | 		{ | ||||||
|  | 			this->_stop(); | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | void e2d::ETransitionMove::_init() | ||||||
| { | { | ||||||
| 	// 初始化动作属性
 |  | ||||||
| 	float distPosX; |  | ||||||
| 	float distPosY; |  | ||||||
| 	if (m_Direct == MOVE_DIRECT::UP) | 	if (m_Direct == MOVE_DIRECT::UP) | ||||||
| 	{ | 	{ | ||||||
| 		distPosX = 0; | 		m_Vec = EVec(0, -EApp::getHeight()); | ||||||
| 		distPosY = -EApp::getHeight(); | 		m_NextPos = EPoint(0, EApp::getHeight()); | ||||||
| 	} | 	} | ||||||
| 	else if (m_Direct == MOVE_DIRECT::DOWN) | 	else if (m_Direct == MOVE_DIRECT::DOWN) | ||||||
| 	{ | 	{ | ||||||
| 		distPosX = 0; | 		m_Vec = EVec(0, EApp::getHeight()); | ||||||
| 		distPosY = EApp::getHeight(); | 		m_NextPos = EPoint(0, -EApp::getHeight()); | ||||||
| 	} | 	} | ||||||
| 	else if (m_Direct == MOVE_DIRECT::LEFT) | 	else if (m_Direct == MOVE_DIRECT::LEFT) | ||||||
| 	{ | 	{ | ||||||
| 		distPosX = -EApp::getWidth(); | 		m_Vec = EVec(-EApp::getWidth(), 0); | ||||||
| 		distPosY = 0; | 		m_NextPos = EPoint(EApp::getWidth(), 0); | ||||||
| 	} | 	} | ||||||
| 	else if (m_Direct == MOVE_DIRECT::RIGHT) | 	else if (m_Direct == MOVE_DIRECT::RIGHT) | ||||||
| 	{ | 	{ | ||||||
| 		distPosX = EApp::getWidth(); | 		m_Vec = EVec(EApp::getWidth(), 0); | ||||||
| 		distPosY = 0; | 		m_NextPos = EPoint(-EApp::getWidth(), 0); | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	// 初始化场景属性
 | 	if (m_pPrevScene) m_pPrevScene->getRoot()->setPos(0, 0); | ||||||
| 	next->getRoot()->movePos(-distPosX, -distPosY); | 	m_pNextScene->getRoot()->setPos(m_NextPos); | ||||||
| 
 |  | ||||||
| 	// 第一个场景移出
 |  | ||||||
| 	auto action1 = new EActionMoveBy(m_fMoveDuration, EVec(distPosX, distPosY)); |  | ||||||
| 	if (prev) |  | ||||||
| 	{ |  | ||||||
| 		action1->setTarget(prev->getRoot()); |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	// 第二个场景移入
 |  | ||||||
| 	auto action2 = new EActionMoveBy(m_fMoveDuration, EVec(distPosX, distPosY)); |  | ||||||
| 	action2->setTarget(next->getRoot()); |  | ||||||
| 
 |  | ||||||
| 	// 标志动画结束
 |  | ||||||
| 	auto action3 = new EActionCallback([&, prev, next] { |  | ||||||
| 		transitional = false; |  | ||||||
| 		// 还原场景状态
 |  | ||||||
| 		if (prev) |  | ||||||
| 		{ |  | ||||||
| 			prev->getRoot()->setPos(EApp::getWidth() / 2, EApp::getHeight() / 2); |  | ||||||
| 		} |  | ||||||
| 		next->getRoot()->setPos(EApp::getWidth() / 2, EApp::getHeight() / 2); |  | ||||||
| 	}); |  | ||||||
| 
 |  | ||||||
| 	// 添加顺序动作
 |  | ||||||
| 	EActionManager::addAction(new EActionSequence(2, new EActionTwoAtSameTime(action1, action2), action3)); |  | ||||||
| } | } | ||||||
|  | 
 | ||||||
|  | void e2d::ETransitionMove::_reset() | ||||||
|  | { | ||||||
|  | 	if (m_pPrevScene) m_pPrevScene->getRoot()->setPos(0, 0); | ||||||
|  | 	m_pNextScene->getRoot()->setPos(0, 0); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  |  | ||||||
|  | @ -1,40 +0,0 @@ | ||||||
| #include "..\etransitions.h" |  | ||||||
| #include "..\eactions.h" |  | ||||||
| #include "..\emanagers.h" |  | ||||||
| 
 |  | ||||||
| e2d::ETransitionScale::ETransitionScale(float scaleOutDuration, float scaleInDuration) |  | ||||||
| 	: m_fScaleOutDuration(scaleOutDuration) |  | ||||||
| 	, m_fScaleInDuration(scaleInDuration) |  | ||||||
| { |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| void e2d::ETransitionScale::_setTarget(EScene * prev, EScene * next, bool & transitional) |  | ||||||
| { |  | ||||||
| 	// 初始化场景属性
 |  | ||||||
| 	next->getRoot()->setScale(0); |  | ||||||
| 
 |  | ||||||
| 	// 第一个场景缩放至消失
 |  | ||||||
| 	auto action1 = new EActionScaleTo(m_fScaleOutDuration, 0); |  | ||||||
| 	if (prev) |  | ||||||
| 	{ |  | ||||||
| 		action1->setTarget(prev->getRoot()); |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	// 第二个场景淡入
 |  | ||||||
| 	auto action2 = new EActionScaleTo(m_fScaleInDuration, 1); |  | ||||||
| 	action2->setTarget(next->getRoot()); |  | ||||||
| 
 |  | ||||||
| 	// 标志动画结束
 |  | ||||||
| 	auto action3 = new EActionCallback([&, prev, next] { |  | ||||||
| 		transitional = false; |  | ||||||
| 		// 还原场景状态
 |  | ||||||
| 		if (prev) |  | ||||||
| 		{ |  | ||||||
| 			prev->getRoot()->setScale(1); |  | ||||||
| 		} |  | ||||||
| 		next->getRoot()->setScale(1); |  | ||||||
| 	}); |  | ||||||
| 
 |  | ||||||
| 	// 添加顺序动作
 |  | ||||||
| 	EActionManager::addAction(new EActionSequence(3, action1, action2, action3)); |  | ||||||
| } |  | ||||||
|  | @ -1,67 +0,0 @@ | ||||||
| #include "..\etransitions.h" |  | ||||||
| #include "..\eactions.h" |  | ||||||
| #include "..\emanagers.h" |  | ||||||
| 
 |  | ||||||
| e2d::ETransitionScaleEmerge::ETransitionScaleEmerge(float duration, SCALE_EMERGE_MODE mode) |  | ||||||
| 	: m_fDuration(duration) |  | ||||||
| 	, m_Mode(mode) |  | ||||||
| { |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| void e2d::ETransitionScaleEmerge::_setTarget(EScene * prev, EScene * next, bool & transitional) |  | ||||||
| { |  | ||||||
| 	float prevScaleBy; |  | ||||||
| 	float nextScaleBy; |  | ||||||
| 	if (m_Mode == SCALE_EMERGE_MODE::ENTER) |  | ||||||
| 	{ |  | ||||||
| 		prevScaleBy = 0.2f; |  | ||||||
| 		nextScaleBy = -0.2f; |  | ||||||
| 	} |  | ||||||
| 	else |  | ||||||
| 	{ |  | ||||||
| 		prevScaleBy = -0.2f; |  | ||||||
| 		nextScaleBy = 0.2f; |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	// 初始化场景属性
 |  | ||||||
| 	next->getRoot()->setScale(next->getRoot()->getScaleX() - nextScaleBy, next->getRoot()->getScaleY() - nextScaleBy); |  | ||||||
| 	next->getRoot()->setOpacity(0); |  | ||||||
| 
 |  | ||||||
| 	// 第一个场景淡出
 |  | ||||||
| 	auto prevActionFadeOut = new EActionFadeOut(m_fDuration); |  | ||||||
| 	auto prevActionScaleBy = new EActionScaleBy(m_fDuration, prevScaleBy); |  | ||||||
| 	auto action1 = new EActionTwoAtSameTime( |  | ||||||
| 		prevActionFadeOut, |  | ||||||
| 		prevActionScaleBy); |  | ||||||
| 	if (prev) |  | ||||||
| 	{ |  | ||||||
| 		prevActionFadeOut->setTarget(prev->getRoot()); |  | ||||||
| 		prevActionScaleBy->setTarget(prev->getRoot()); |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	// 第二个场景淡入
 |  | ||||||
| 	auto nextActionFadeOut = new EActionFadeIn(m_fDuration); |  | ||||||
| 	auto nextActionScaleBy = new EActionScaleBy(m_fDuration, nextScaleBy); |  | ||||||
| 	auto action2 = new EActionTwoAtSameTime( |  | ||||||
| 		nextActionFadeOut, |  | ||||||
| 		nextActionScaleBy); |  | ||||||
| 
 |  | ||||||
| 	nextActionFadeOut->setTarget(next->getRoot()); |  | ||||||
| 	nextActionScaleBy->setTarget(next->getRoot()); |  | ||||||
| 
 |  | ||||||
| 	// 标志动画结束
 |  | ||||||
| 	auto action3 = new EActionCallback([&, prev, next] { |  | ||||||
| 		transitional = false; |  | ||||||
| 		// 还原场景状态
 |  | ||||||
| 		if (prev) |  | ||||||
| 		{ |  | ||||||
| 			prev->getRoot()->setScale(1); |  | ||||||
| 			prev->getRoot()->setOpacity(1); |  | ||||||
| 		} |  | ||||||
| 		next->getRoot()->setScale(1); |  | ||||||
| 		next->getRoot()->setOpacity(1); |  | ||||||
| 	}); |  | ||||||
| 
 |  | ||||||
| 	// 添加顺序动作
 |  | ||||||
| 	EActionManager::addAction(new EActionSequence(2, new EActionTwoAtSameTime(action1, action2), action3)); |  | ||||||
| } |  | ||||||
|  | @ -52,8 +52,8 @@ public: | ||||||
| 	// 切换场景
 | 	// 切换场景
 | ||||||
| 	static void enterScene( | 	static void enterScene( | ||||||
| 		EScene * scene,						/* 下一个场景的指针 */ | 		EScene * scene,						/* 下一个场景的指针 */ | ||||||
| 		bool saveCurrentScene = true,		/* 是否保存当前场景 */ | 		ETransition * transition = nullptr,	/* 场景切换动画 */ | ||||||
| 		ETransition * transition = nullptr	/* 场景切换动画 */ | 		bool saveCurrentScene = true		/* 是否保存当前场景 */ | ||||||
| 	); | 	); | ||||||
| 
 | 
 | ||||||
| 	// 返回上一场景
 | 	// 返回上一场景
 | ||||||
|  | @ -175,7 +175,6 @@ private: | ||||||
| 	bool	m_bEnd; | 	bool	m_bEnd; | ||||||
| 	bool	m_bPaused; | 	bool	m_bPaused; | ||||||
| 	bool	m_bManualPaused; | 	bool	m_bManualPaused; | ||||||
| 	bool	m_bTransitional; |  | ||||||
| 	bool	m_bTopMost; | 	bool	m_bTopMost; | ||||||
| 	bool	m_bShowConsole; | 	bool	m_bShowConsole; | ||||||
| 	EString	m_sTitle; | 	EString	m_sTitle; | ||||||
|  | @ -184,6 +183,7 @@ private: | ||||||
| 	LONGLONG m_nAnimationInterval; | 	LONGLONG m_nAnimationInterval; | ||||||
| 	EScene * m_pCurrentScene; | 	EScene * m_pCurrentScene; | ||||||
| 	EScene * m_pNextScene; | 	EScene * m_pNextScene; | ||||||
|  | 	ETransition * m_pTransition; | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -11,6 +11,7 @@ class EButton; | ||||||
| class EButtonToggle; | class EButtonToggle; | ||||||
| class EGeometry; | class EGeometry; | ||||||
| class EMenu; | class EMenu; | ||||||
|  | class ETransition; | ||||||
| 
 | 
 | ||||||
| class ENode : | class ENode : | ||||||
| 	public EObject | 	public EObject | ||||||
|  | @ -19,6 +20,7 @@ class ENode : | ||||||
| 	friend EButton; | 	friend EButton; | ||||||
| 	friend EButtonToggle; | 	friend EButtonToggle; | ||||||
| 	friend EGeometry; | 	friend EGeometry; | ||||||
|  | 	friend ETransition; | ||||||
| 
 | 
 | ||||||
| public: | public: | ||||||
| 	ENode(); | 	ENode(); | ||||||
|  |  | ||||||
|  | @ -1,5 +1,6 @@ | ||||||
| #pragma once | #pragma once | ||||||
| #include "ebase.h" | #include "ebase.h" | ||||||
|  | #include <chrono> | ||||||
| 
 | 
 | ||||||
| namespace e2d | namespace e2d | ||||||
| { | { | ||||||
|  | @ -9,13 +10,38 @@ class ETransition : | ||||||
| { | { | ||||||
| 	friend EApp; | 	friend EApp; | ||||||
| 
 | 
 | ||||||
|  | public: | ||||||
|  | 	ETransition(float duration); | ||||||
|  | 
 | ||||||
|  | 	// 场景切换动画是否结束
 | ||||||
|  | 	bool isEnding(); | ||||||
|  | 
 | ||||||
| protected: | protected: | ||||||
| 	// 保存当前场景和下一场景的指针,和控制场景切换的变量
 | 	// 更新动画
 | ||||||
| 	virtual void _setTarget( | 	virtual void _update() = 0; | ||||||
|  | 
 | ||||||
|  | 	virtual void _init() = 0; | ||||||
|  | 
 | ||||||
|  | 	virtual void _reset() = 0; | ||||||
|  | 
 | ||||||
|  | 	virtual bool _isDelayEnough(); | ||||||
|  | 
 | ||||||
|  | 	virtual void _stop(); | ||||||
|  | 
 | ||||||
|  | 	// 保存当前场景和下一场景的指针
 | ||||||
|  | 	void _setTarget( | ||||||
| 		EScene * prev, | 		EScene * prev, | ||||||
| 		EScene * next, | 		EScene * next | ||||||
| 		bool &transitional | 	); | ||||||
| 	) = 0; | 
 | ||||||
|  | protected: | ||||||
|  | 	bool m_bEnd; | ||||||
|  | 	float m_fTotalDuration; | ||||||
|  | 	float m_fDuration; | ||||||
|  | 	float m_fRateOfProgress; | ||||||
|  | 	EScene * m_pPrevScene; | ||||||
|  | 	EScene * m_pNextScene; | ||||||
|  | 	std::chrono::steady_clock::time_point m_tLast; | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|  | @ -30,16 +56,17 @@ public: | ||||||
| 	); | 	); | ||||||
| 
 | 
 | ||||||
| protected: | protected: | ||||||
| 	// 保存当前场景和下一场景的指针,和控制场景切换的变量
 | 	// 更新动画
 | ||||||
| 	virtual void _setTarget( | 	virtual void _update() override; | ||||||
| 		EScene * prev, | 
 | ||||||
| 		EScene * next, | 	virtual void _init() override; | ||||||
| 		bool &transitional | 
 | ||||||
| 	) override; | 	virtual void _reset() override; | ||||||
| 
 | 
 | ||||||
| protected: | protected: | ||||||
| 	float m_fFadeOutDuration; | 	float m_fFadeOutDuration; | ||||||
| 	float m_fFadeInDuration; | 	float m_fFadeInDuration; | ||||||
|  | 	bool m_bFadeOutTransioning; | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|  | @ -49,19 +76,16 @@ class ETransitionEmerge : | ||||||
| public: | public: | ||||||
| 	// 创建浮现式的场景切换动画
 | 	// 创建浮现式的场景切换动画
 | ||||||
| 	ETransitionEmerge( | 	ETransitionEmerge( | ||||||
| 		float emergeDuration	/* 浮现动画持续时长 */ | 		float duration	/* 浮现动画持续时长 */ | ||||||
| 	); | 	); | ||||||
| 
 | 
 | ||||||
| protected: | protected: | ||||||
| 	// 保存当前场景和下一场景的指针,和控制场景切换的变量
 | 	// 更新动画
 | ||||||
| 	virtual void _setTarget( | 	virtual void _update() override; | ||||||
| 		EScene * prev, |  | ||||||
| 		EScene * next, |  | ||||||
| 		bool &transitional |  | ||||||
| 	) override; |  | ||||||
| 
 | 
 | ||||||
| protected: | 	virtual void _init() override; | ||||||
| 	float m_fEmergeDuration; | 
 | ||||||
|  | 	virtual void _reset() override; | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|  | @ -80,74 +104,21 @@ public: | ||||||
| 	// 创建移动式的场景切换动画
 | 	// 创建移动式的场景切换动画
 | ||||||
| 	ETransitionMove( | 	ETransitionMove( | ||||||
| 		float moveDuration,			/* 场景移动动画持续时长 */ | 		float moveDuration,			/* 场景移动动画持续时长 */ | ||||||
| 		MOVE_DIRECT direct	/* 场景移动方向 */ | 		MOVE_DIRECT direct = LEFT	/* 场景移动方向 */ | ||||||
| 	); | 	); | ||||||
| 
 | 
 | ||||||
| protected: | protected: | ||||||
| 	// 保存当前场景和下一场景的指针,和控制场景切换的变量
 | 	// 更新动画
 | ||||||
| 	virtual void _setTarget( | 	virtual void _update() override; | ||||||
| 		EScene * prev, | 
 | ||||||
| 		EScene * next, | 	virtual void _init() override; | ||||||
| 		bool &transitional | 
 | ||||||
| 	) override; | 	virtual void _reset() override; | ||||||
| 
 | 
 | ||||||
| protected: | protected: | ||||||
| 	float m_fMoveDuration; |  | ||||||
| 	MOVE_DIRECT m_Direct; | 	MOVE_DIRECT m_Direct; | ||||||
| }; | 	EVec m_Vec; | ||||||
| 
 | 	EPoint m_NextPos; | ||||||
| 
 |  | ||||||
| class ETransitionScale : |  | ||||||
| 	public ETransition |  | ||||||
| { |  | ||||||
| public: |  | ||||||
| 	// 创建缩放式的场景切换动画
 |  | ||||||
| 	ETransitionScale( |  | ||||||
| 		float scaleOutDuration,	/* 第一个场景缩放动画持续时长 */ |  | ||||||
| 		float scaleInDuration	/* 第二个场景缩放动画持续时长 */ |  | ||||||
| 	); |  | ||||||
| 
 |  | ||||||
| protected: |  | ||||||
| 	// 保存当前场景和下一场景的指针,和控制场景切换的变量
 |  | ||||||
| 	virtual void _setTarget( |  | ||||||
| 		EScene * prev, |  | ||||||
| 		EScene * next, |  | ||||||
| 		bool &transitional |  | ||||||
| 	) override; |  | ||||||
| 
 |  | ||||||
| protected: |  | ||||||
| 	float m_fScaleOutDuration; |  | ||||||
| 	float m_fScaleInDuration; |  | ||||||
| }; |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| class ETransitionScaleEmerge : |  | ||||||
| 	public ETransition |  | ||||||
| { |  | ||||||
| public: |  | ||||||
| 	enum SCALE_EMERGE_MODE |  | ||||||
| 	{ |  | ||||||
| 		ENTER, |  | ||||||
| 		BACK |  | ||||||
| 	}; |  | ||||||
| 
 |  | ||||||
| 	// 创建缩放浮现式的场景切换动画
 |  | ||||||
| 	ETransitionScaleEmerge( |  | ||||||
| 		float duration,			/* 场景动画持续时长 */ |  | ||||||
| 		SCALE_EMERGE_MODE mode	/* 场景移动方向 */ |  | ||||||
| 	); |  | ||||||
| 
 |  | ||||||
| protected: |  | ||||||
| 	// 保存当前场景和下一场景的指针,和控制场景切换的变量
 |  | ||||||
| 	virtual void _setTarget( |  | ||||||
| 		EScene * prev, |  | ||||||
| 		EScene * next, |  | ||||||
| 		bool &transitional |  | ||||||
| 	) override; |  | ||||||
| 
 |  | ||||||
| protected: |  | ||||||
| 	float m_fDuration; |  | ||||||
| 	SCALE_EMERGE_MODE m_Mode; |  | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| } | } | ||||||
|  | @ -33,6 +33,16 @@ struct EPoint | ||||||
| 	{ | 	{ | ||||||
| 		return EPoint(x - p.x, y - p.y); | 		return EPoint(x - p.x, y - p.y); | ||||||
| 	} | 	} | ||||||
|  | 
 | ||||||
|  | 	EPoint operator * (float const & value) | ||||||
|  | 	{ | ||||||
|  | 		return EPoint(x * value, y * value); | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	EPoint operator / (float const & value) | ||||||
|  | 	{ | ||||||
|  | 		return EPoint(x / value, y / value); | ||||||
|  | 	} | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| struct ESize | struct ESize | ||||||
|  | @ -61,6 +71,16 @@ struct ESize | ||||||
| 	{ | 	{ | ||||||
| 		return ESize(width - size.width, height - size.height); | 		return ESize(width - size.width, height - size.height); | ||||||
| 	} | 	} | ||||||
|  | 
 | ||||||
|  | 	ESize operator * (float const & value) | ||||||
|  | 	{ | ||||||
|  | 		return ESize(width * value, height * value); | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	ESize operator / (float const & value) | ||||||
|  | 	{ | ||||||
|  | 		return ESize(width / value, height / value); | ||||||
|  | 	} | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue