添加了Geometry类;重整了监听器和定时器的绑定。
This commit is contained in:
		
							parent
							
								
									3f892d23a8
								
							
						
					
					
						commit
						508a3e0fab
					
				|  | @ -1,12 +1,11 @@ | ||||||
| #include "..\ebase.h" | #include "..\ebase.h" | ||||||
| #include "..\Win\winbase.h" | #include "..\Win\winbase.h" | ||||||
| #include "..\emsg.h" | #include "..\emanagers.h" | ||||||
| #include "..\etools.h" |  | ||||||
| #include "..\enodes.h" | #include "..\enodes.h" | ||||||
| #include "..\etransitions.h" | #include "..\etransitions.h" | ||||||
| #include <stack> | #include <stack> | ||||||
| #include <thread> | #include <thread> | ||||||
| #include <imm.h>   | #include <imm.h> | ||||||
| #pragma comment (lib ,"imm32.lib") | #pragma comment (lib ,"imm32.lib") | ||||||
| 
 | 
 | ||||||
| using namespace std::this_thread; | using namespace std::this_thread; | ||||||
|  | @ -75,7 +74,7 @@ bool e2d::EApp::init(const EString &title, UINT32 width, UINT32 height, EWindowS | ||||||
| 		// 注册窗口类
 | 		// 注册窗口类
 | ||||||
| 		WNDCLASSEX wcex = { sizeof(WNDCLASSEX) }; | 		WNDCLASSEX wcex = { sizeof(WNDCLASSEX) }; | ||||||
| 		UINT style = CS_HREDRAW | CS_VREDRAW | CS_DBLCLKS; | 		UINT style = CS_HREDRAW | CS_VREDRAW | CS_DBLCLKS; | ||||||
| 		if (wStyle.NO_CLOSE) | 		if (wStyle.m_bNoClose) | ||||||
| 		{ | 		{ | ||||||
| 			style |= CS_NOCLOSE; | 			style |= CS_NOCLOSE; | ||||||
| 		} | 		} | ||||||
|  | @ -88,9 +87,9 @@ bool e2d::EApp::init(const EString &title, UINT32 width, UINT32 height, EWindowS | ||||||
| 		wcex.lpszMenuName = NULL; | 		wcex.lpszMenuName = NULL; | ||||||
| 		wcex.hCursor = LoadCursor(NULL, IDI_APPLICATION); | 		wcex.hCursor = LoadCursor(NULL, IDI_APPLICATION); | ||||||
| 		wcex.lpszClassName = L"Easy2DApp"; | 		wcex.lpszClassName = L"Easy2DApp"; | ||||||
| 		if (wStyle.ICON_ID) | 		if (wStyle.m_pIconID) | ||||||
| 		{ | 		{ | ||||||
| 			wcex.hIcon = (HICON)::LoadImage(GetModuleHandle(NULL), wStyle.ICON_ID, IMAGE_ICON, 0, 0, LR_DEFAULTCOLOR | LR_CREATEDIBSECTION | LR_DEFAULTSIZE); | 			wcex.hIcon = (HICON)::LoadImage(GetModuleHandle(NULL), wStyle.m_pIconID, IMAGE_ICON, 0, 0, LR_DEFAULTCOLOR | LR_CREATEDIBSECTION | LR_DEFAULTSIZE); | ||||||
| 		} | 		} | ||||||
| 
 | 
 | ||||||
| 		RegisterClassEx(&wcex); | 		RegisterClassEx(&wcex); | ||||||
|  | @ -117,12 +116,12 @@ bool e2d::EApp::init(const EString &title, UINT32 width, UINT32 height, EWindowS | ||||||
| 		 | 		 | ||||||
| 		// 创建窗口样式
 | 		// 创建窗口样式
 | ||||||
| 		DWORD dwStyle = WS_OVERLAPPED | WS_SYSMENU; | 		DWORD dwStyle = WS_OVERLAPPED | WS_SYSMENU; | ||||||
| 		if (!wStyle.NO_MINI_SIZE) | 		if (!wStyle.m_bNoMiniSize) | ||||||
| 		{ | 		{ | ||||||
| 			dwStyle |= WS_MINIMIZEBOX; | 			dwStyle |= WS_MINIMIZEBOX; | ||||||
| 		} | 		} | ||||||
| 		// 保存窗口是否置顶显示
 | 		// 保存窗口是否置顶显示
 | ||||||
| 		m_bTopMost = wStyle.TOP_MOST; | 		m_bTopMost = wStyle.m_bTopMost; | ||||||
| 		// 保存窗口名称
 | 		// 保存窗口名称
 | ||||||
| 		m_sTitle = title; | 		m_sTitle = title; | ||||||
| 		// 创建窗口
 | 		// 创建窗口
 | ||||||
|  | @ -366,7 +365,7 @@ void e2d::EApp::_onRender() | ||||||
| 		// 开始绘图
 | 		// 开始绘图
 | ||||||
| 		GetRenderTarget()->BeginDraw(); | 		GetRenderTarget()->BeginDraw(); | ||||||
| 		// 使用背景色清空屏幕
 | 		// 使用背景色清空屏幕
 | ||||||
| 		GetRenderTarget()->Clear(D2D1::ColorF(m_ClearColor.value)); | 		GetRenderTarget()->Clear(D2D1::ColorF(m_ClearColor)); | ||||||
| 		// 绘制当前场景
 | 		// 绘制当前场景
 | ||||||
| 		if (m_pCurrentScene) | 		if (m_pCurrentScene) | ||||||
| 		{ | 		{ | ||||||
|  | @ -528,7 +527,7 @@ e2d::EString e2d::EApp::getAppName() | ||||||
| 	return s_pInstance->m_sAppName; | 	return s_pInstance->m_sAppName; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void e2d::EApp::setBkColor(EColor color) | void e2d::EApp::setBkColor(UINT32 color) | ||||||
| { | { | ||||||
| 	get()->m_ClearColor = color; | 	get()->m_ClearColor = color; | ||||||
| } | } | ||||||
|  |  | ||||||
|  | @ -1,5 +1,5 @@ | ||||||
| #include "..\ebase.h" | #include "..\ebase.h" | ||||||
| #include "..\etools.h" | #include "..\emanagers.h" | ||||||
| 
 | 
 | ||||||
| e2d::EObject::EObject() | e2d::EObject::EObject() | ||||||
| 	: m_nRefCount(0) | 	: m_nRefCount(0) | ||||||
|  |  | ||||||
|  | @ -1,7 +1,8 @@ | ||||||
| #include "..\ebase.h" | #include "..\ebase.h" | ||||||
| #include "..\enodes.h" | #include "..\enodes.h" | ||||||
| #include "..\emsg.h" | #include "..\emanagers.h" | ||||||
| #include "..\etools.h" | #include "..\etools.h" | ||||||
|  | #include "..\eactions.h" | ||||||
| #include <algorithm> | #include <algorithm> | ||||||
| 
 | 
 | ||||||
| e2d::EScene::EScene() | e2d::EScene::EScene() | ||||||
|  | @ -17,9 +18,6 @@ e2d::EScene::EScene() | ||||||
| 
 | 
 | ||||||
| e2d::EScene::~EScene() | e2d::EScene::~EScene() | ||||||
| { | { | ||||||
| 	ETimerManager::_clearAllTimersBindedWith(this); |  | ||||||
| 	EMsgManager::_clearAllMouseListenersBindedWith(this); |  | ||||||
| 	EMsgManager::_clearAllKeyboardListenersBindedWith(this); |  | ||||||
| 	SafeReleaseAndClear(&m_pRoot); | 	SafeReleaseAndClear(&m_pRoot); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | @ -91,6 +89,11 @@ void e2d::EScene::clearAllChildren() | ||||||
| 	m_pRoot->clearAllChildren(); | 	m_pRoot->clearAllChildren(); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | void e2d::EScene::runAction(EAction * action) | ||||||
|  | { | ||||||
|  | 	this->m_pRoot->runAction(action); | ||||||
|  | } | ||||||
|  | 
 | ||||||
| void e2d::EScene::bindListener(EMouseListener * listener) | void e2d::EScene::bindListener(EMouseListener * listener) | ||||||
| { | { | ||||||
| 	EMsgManager::bindListener(listener, this); | 	EMsgManager::bindListener(listener, this); | ||||||
|  |  | ||||||
|  | @ -0,0 +1,59 @@ | ||||||
|  | #include "..\ecommon.h" | ||||||
|  | 
 | ||||||
|  | static e2d::EKeyboardMsg s_KeyboardMsg; | ||||||
|  | 
 | ||||||
|  | e2d::EKeyboardMsg::KEYBOARD_MSG e2d::EKeyboardMsg::getMsg() | ||||||
|  | { | ||||||
|  | 	return KEYBOARD_MSG(s_KeyboardMsg.m_nMsg); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | e2d::EKeyboardMsg::KEY e2d::EKeyboardMsg::getVal() | ||||||
|  | { | ||||||
|  | 	return KEY(s_KeyboardMsg.m_wParam); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | DWORD e2d::EKeyboardMsg::getCount() | ||||||
|  | { | ||||||
|  | 	return (((DWORD)s_KeyboardMsg.m_lParam) & 0x0000FFFF); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | bool e2d::EKeyboardMsg::isKeyDown(KEY key) | ||||||
|  | { | ||||||
|  | 	if (::GetAsyncKeyState((int)key) & 0x8000) | ||||||
|  | 	{ | ||||||
|  | 		return true; | ||||||
|  | 	} | ||||||
|  | 	return false; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | bool e2d::EKeyboardMsg::isCapitalLockOn() | ||||||
|  | { | ||||||
|  | 	if (::GetKeyState(VK_CAPITAL) & 0x0001) | ||||||
|  | 	{ | ||||||
|  | 		return true; | ||||||
|  | 	} | ||||||
|  | 	return false; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | bool e2d::EKeyboardMsg::isNumpadLockOn() | ||||||
|  | { | ||||||
|  | 	if (::GetKeyState(VK_NUMLOCK) & 0x0001) | ||||||
|  | 	{ | ||||||
|  | 		return true; | ||||||
|  | 	} | ||||||
|  | 	return false; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | bool e2d::EKeyboardMsg::isScrollLockOn() | ||||||
|  | { | ||||||
|  | 	if (::GetKeyState(VK_SCROLL) & 0x0001) | ||||||
|  | 	{ | ||||||
|  | 		return true; | ||||||
|  | 	} | ||||||
|  | 	return false; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | e2d::EKeyboardMsg & e2d::EKeyboardMsg::getKeyboardMsg() | ||||||
|  | { | ||||||
|  | 	return s_KeyboardMsg; | ||||||
|  | } | ||||||
|  | @ -0,0 +1,58 @@ | ||||||
|  | #include "..\ecommon.h" | ||||||
|  | 
 | ||||||
|  | static e2d::EMouseMsg s_MouseMsg; | ||||||
|  | 
 | ||||||
|  | DWORD e2d::EMouseMsg::getPosX() | ||||||
|  | { | ||||||
|  | 	return LOWORD(s_MouseMsg.m_lParam); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | DWORD e2d::EMouseMsg::getPosY() | ||||||
|  | { | ||||||
|  | 	return HIWORD(s_MouseMsg.m_lParam); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | e2d::EPoint e2d::EMouseMsg::getPos() | ||||||
|  | { | ||||||
|  | 	return EPoint(LOWORD(s_MouseMsg.m_lParam), HIWORD(s_MouseMsg.m_lParam)); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | bool e2d::EMouseMsg::isLButtonDown() | ||||||
|  | { | ||||||
|  | 	return GET_KEYSTATE_WPARAM(s_MouseMsg.m_wParam) == MK_LBUTTON; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | bool e2d::EMouseMsg::isMButtonDown() | ||||||
|  | { | ||||||
|  | 	return GET_KEYSTATE_WPARAM(s_MouseMsg.m_wParam) == MK_MBUTTON; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | bool e2d::EMouseMsg::isRButtonDown() | ||||||
|  | { | ||||||
|  | 	return GET_KEYSTATE_WPARAM(s_MouseMsg.m_wParam) == MK_RBUTTON; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | bool e2d::EMouseMsg::isShiftDown() | ||||||
|  | { | ||||||
|  | 	return GET_KEYSTATE_WPARAM(s_MouseMsg.m_wParam) == MK_SHIFT; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | bool e2d::EMouseMsg::isCtrlDown() | ||||||
|  | { | ||||||
|  | 	return GET_KEYSTATE_WPARAM(s_MouseMsg.m_wParam) == MK_CONTROL; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | DWORD e2d::EMouseMsg::getWheelDelta() | ||||||
|  | { | ||||||
|  | 	return GET_WHEEL_DELTA_WPARAM(s_MouseMsg.m_wParam); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | e2d::EMouseMsg::MOUSE_MSG e2d::EMouseMsg::getMsg() | ||||||
|  | { | ||||||
|  | 	return MOUSE_MSG(s_MouseMsg.m_nMsg); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | e2d::EMouseMsg & e2d::EMouseMsg::getMouseMsg() | ||||||
|  | { | ||||||
|  | 	return s_MouseMsg; | ||||||
|  | } | ||||||
|  | @ -210,6 +210,13 @@ | ||||||
|     <ClCompile Include="Base\EApp.cpp" /> |     <ClCompile Include="Base\EApp.cpp" /> | ||||||
|     <ClCompile Include="Base\EObject.cpp" /> |     <ClCompile Include="Base\EObject.cpp" /> | ||||||
|     <ClCompile Include="Base\EScene.cpp" /> |     <ClCompile Include="Base\EScene.cpp" /> | ||||||
|  |     <ClCompile Include="Common\EKeyboardMsg.cpp" /> | ||||||
|  |     <ClCompile Include="Common\EMouseMsg.cpp" /> | ||||||
|  |     <ClCompile Include="Geometry\ECircle.cpp" /> | ||||||
|  |     <ClCompile Include="Geometry\EEllipse.cpp" /> | ||||||
|  |     <ClCompile Include="Geometry\EGeometry.cpp" /> | ||||||
|  |     <ClCompile Include="Geometry\ERectangle.cpp" /> | ||||||
|  |     <ClCompile Include="Listener\ECollisionListener.cpp" /> | ||||||
|     <ClCompile Include="Listener\EKeyboardListener.cpp" /> |     <ClCompile Include="Listener\EKeyboardListener.cpp" /> | ||||||
|     <ClCompile Include="Listener\EKeyboardPressListener.cpp" /> |     <ClCompile Include="Listener\EKeyboardPressListener.cpp" /> | ||||||
|     <ClCompile Include="Listener\EListener.cpp" /> |     <ClCompile Include="Listener\EListener.cpp" /> | ||||||
|  | @ -221,6 +228,7 @@ | ||||||
|     <ClCompile Include="Manager\EActionManager.cpp" /> |     <ClCompile Include="Manager\EActionManager.cpp" /> | ||||||
|     <ClCompile Include="Manager\EMsgManager.cpp" /> |     <ClCompile Include="Manager\EMsgManager.cpp" /> | ||||||
|     <ClCompile Include="Manager\EObjectManager.cpp" /> |     <ClCompile Include="Manager\EObjectManager.cpp" /> | ||||||
|  |     <ClCompile Include="Manager\EPhysicsManager.cpp" /> | ||||||
|     <ClCompile Include="Manager\ETimerManager.cpp" /> |     <ClCompile Include="Manager\ETimerManager.cpp" /> | ||||||
|     <ClCompile Include="Node\EButton.cpp" /> |     <ClCompile Include="Node\EButton.cpp" /> | ||||||
|     <ClCompile Include="Node\ENode.cpp" /> |     <ClCompile Include="Node\ENode.cpp" /> | ||||||
|  | @ -245,8 +253,10 @@ | ||||||
|     <ClInclude Include="easy2d.h" /> |     <ClInclude Include="easy2d.h" /> | ||||||
|     <ClInclude Include="ebase.h" /> |     <ClInclude Include="ebase.h" /> | ||||||
|     <ClInclude Include="ecommon.h" /> |     <ClInclude Include="ecommon.h" /> | ||||||
|  |     <ClInclude Include="egeometry.h" /> | ||||||
|  |     <ClInclude Include="elisteners.h" /> | ||||||
|     <ClInclude Include="emacros.h" /> |     <ClInclude Include="emacros.h" /> | ||||||
|     <ClInclude Include="emsg.h" /> |     <ClInclude Include="emanagers.h" /> | ||||||
|     <ClInclude Include="enodes.h" /> |     <ClInclude Include="enodes.h" /> | ||||||
|     <ClInclude Include="etools.h" /> |     <ClInclude Include="etools.h" /> | ||||||
|     <ClInclude Include="etransitions.h" /> |     <ClInclude Include="etransitions.h" /> | ||||||
|  |  | ||||||
|  | @ -25,6 +25,12 @@ | ||||||
|     <Filter Include="Listener"> |     <Filter Include="Listener"> | ||||||
|       <UniqueIdentifier>{b9bb1728-5106-4574-998e-8564b49cb4a1}</UniqueIdentifier> |       <UniqueIdentifier>{b9bb1728-5106-4574-998e-8564b49cb4a1}</UniqueIdentifier> | ||||||
|     </Filter> |     </Filter> | ||||||
|  |     <Filter Include="Geometry"> | ||||||
|  |       <UniqueIdentifier>{d5f86335-f3a0-450d-92a3-7edd9348d995}</UniqueIdentifier> | ||||||
|  |     </Filter> | ||||||
|  |     <Filter Include="Common"> | ||||||
|  |       <UniqueIdentifier>{be5d9314-b00a-4f11-bd2a-1f720dc32407}</UniqueIdentifier> | ||||||
|  |     </Filter> | ||||||
|   </ItemGroup> |   </ItemGroup> | ||||||
|   <ItemGroup> |   <ItemGroup> | ||||||
|     <ClCompile Include="Win\winbase.cpp"> |     <ClCompile Include="Win\winbase.cpp"> | ||||||
|  | @ -174,6 +180,30 @@ | ||||||
|     <ClCompile Include="Tool\EMusicUtils.cpp"> |     <ClCompile Include="Tool\EMusicUtils.cpp"> | ||||||
|       <Filter>Tool</Filter> |       <Filter>Tool</Filter> | ||||||
|     </ClCompile> |     </ClCompile> | ||||||
|  |     <ClCompile Include="Geometry\ERectangle.cpp"> | ||||||
|  |       <Filter>Geometry</Filter> | ||||||
|  |     </ClCompile> | ||||||
|  |     <ClCompile Include="Geometry\EGeometry.cpp"> | ||||||
|  |       <Filter>Geometry</Filter> | ||||||
|  |     </ClCompile> | ||||||
|  |     <ClCompile Include="Geometry\ECircle.cpp"> | ||||||
|  |       <Filter>Geometry</Filter> | ||||||
|  |     </ClCompile> | ||||||
|  |     <ClCompile Include="Geometry\EEllipse.cpp"> | ||||||
|  |       <Filter>Geometry</Filter> | ||||||
|  |     </ClCompile> | ||||||
|  |     <ClCompile Include="Listener\ECollisionListener.cpp"> | ||||||
|  |       <Filter>Listener</Filter> | ||||||
|  |     </ClCompile> | ||||||
|  |     <ClCompile Include="Common\EMouseMsg.cpp"> | ||||||
|  |       <Filter>Common</Filter> | ||||||
|  |     </ClCompile> | ||||||
|  |     <ClCompile Include="Common\EKeyboardMsg.cpp"> | ||||||
|  |       <Filter>Common</Filter> | ||||||
|  |     </ClCompile> | ||||||
|  |     <ClCompile Include="Manager\EPhysicsManager.cpp"> | ||||||
|  |       <Filter>Manager</Filter> | ||||||
|  |     </ClCompile> | ||||||
|   </ItemGroup> |   </ItemGroup> | ||||||
|   <ItemGroup> |   <ItemGroup> | ||||||
|     <ClInclude Include="Win\winbase.h"> |     <ClInclude Include="Win\winbase.h"> | ||||||
|  | @ -185,8 +215,10 @@ | ||||||
|     <ClInclude Include="ecommon.h" /> |     <ClInclude Include="ecommon.h" /> | ||||||
|     <ClInclude Include="ebase.h" /> |     <ClInclude Include="ebase.h" /> | ||||||
|     <ClInclude Include="easy2d.h" /> |     <ClInclude Include="easy2d.h" /> | ||||||
|     <ClInclude Include="emsg.h" /> |  | ||||||
|     <ClInclude Include="eactions.h" /> |     <ClInclude Include="eactions.h" /> | ||||||
|     <ClInclude Include="etransitions.h" /> |     <ClInclude Include="etransitions.h" /> | ||||||
|  |     <ClInclude Include="egeometry.h" /> | ||||||
|  |     <ClInclude Include="elisteners.h" /> | ||||||
|  |     <ClInclude Include="emanagers.h" /> | ||||||
|   </ItemGroup> |   </ItemGroup> | ||||||
| </Project> | </Project> | ||||||
|  | @ -0,0 +1,32 @@ | ||||||
|  | #include "..\egeometry.h" | ||||||
|  | #include "..\Win\winbase.h" | ||||||
|  | 
 | ||||||
|  | e2d::ECircle::ECircle() | ||||||
|  | { | ||||||
|  | 	this->_setCircle(EPoint(), 0); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | e2d::ECircle::ECircle(EPoint center, float radius) | ||||||
|  | { | ||||||
|  | 	this->_setCircle(center, radius); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | void e2d::ECircle::_setCircle(EPoint center, float radius) | ||||||
|  | { | ||||||
|  | 	SafeReleaseInterface(&m_pD2dCircle); | ||||||
|  | 
 | ||||||
|  | 	GetFactory()->CreateEllipseGeometry( | ||||||
|  | 		D2D1::Ellipse( | ||||||
|  | 			D2D1::Point2F( | ||||||
|  | 				center.x,  | ||||||
|  | 				center.y), | ||||||
|  | 			radius, | ||||||
|  | 			radius), | ||||||
|  | 			&m_pD2dCircle | ||||||
|  | 		); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | ID2D1EllipseGeometry * e2d::ECircle::_getD2dGeometry() const | ||||||
|  | { | ||||||
|  | 	return m_pD2dCircle; | ||||||
|  | } | ||||||
|  | @ -0,0 +1,32 @@ | ||||||
|  | #include "..\egeometry.h" | ||||||
|  | #include "..\Win\winbase.h" | ||||||
|  | 
 | ||||||
|  | e2d::EEllipse::EEllipse() | ||||||
|  | { | ||||||
|  | 	this->_setEllipse(EPoint(), 0, 0); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | e2d::EEllipse::EEllipse(EPoint center, float radiusX, float radiusY) | ||||||
|  | { | ||||||
|  | 	this->_setEllipse(center, radiusX, radiusY); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | void e2d::EEllipse::_setEllipse(EPoint center, float radiusX, float radiusY) | ||||||
|  | { | ||||||
|  | 	SafeReleaseInterface(&m_pD2dEllipse); | ||||||
|  | 
 | ||||||
|  | 	GetFactory()->CreateEllipseGeometry( | ||||||
|  | 		D2D1::Ellipse( | ||||||
|  | 			D2D1::Point2F( | ||||||
|  | 				center.x, | ||||||
|  | 				center.y), | ||||||
|  | 			radiusX, | ||||||
|  | 			radiusY), | ||||||
|  | 		&m_pD2dEllipse | ||||||
|  | 	); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | ID2D1EllipseGeometry * e2d::EEllipse::_getD2dGeometry() const | ||||||
|  | { | ||||||
|  | 	return m_pD2dEllipse; | ||||||
|  | } | ||||||
|  | @ -0,0 +1,28 @@ | ||||||
|  | #include "..\egeometry.h" | ||||||
|  | #include "..\Win\winbase.h" | ||||||
|  | 
 | ||||||
|  | e2d::EGeometry::EGeometry() | ||||||
|  | 	: m_bTransformed(true) | ||||||
|  | 	, m_pParentNode(nullptr) | ||||||
|  | { | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | bool e2d::EGeometry::_isCollisionWith(EGeometry * pGeometry) | ||||||
|  | { | ||||||
|  | 	D2D1_GEOMETRY_RELATION relation; | ||||||
|  | 
 | ||||||
|  | 	HRESULT	hr = this->_getD2dGeometry()->CompareWithGeometry( | ||||||
|  | 		pGeometry->_getD2dGeometry(), | ||||||
|  | 		D2D1::Matrix3x2F::Identity(), | ||||||
|  | 		&relation | ||||||
|  | 	); | ||||||
|  | 
 | ||||||
|  | 	if (SUCCEEDED(hr)) | ||||||
|  | 	{ | ||||||
|  | 		return (relation == D2D1_GEOMETRY_RELATION::D2D1_GEOMETRY_RELATION_OVERLAP) ||  | ||||||
|  | 			(relation == D2D1_GEOMETRY_RELATION::D2D1_GEOMETRY_RELATION_CONTAINS) || | ||||||
|  | 			(relation == D2D1_GEOMETRY_RELATION::D2D1_GEOMETRY_RELATION_IS_CONTAINED); | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	return false; | ||||||
|  | } | ||||||
|  | @ -0,0 +1,43 @@ | ||||||
|  | #include "..\egeometry.h" | ||||||
|  | #include "..\enodes.h" | ||||||
|  | #include "..\Win\winbase.h" | ||||||
|  | 
 | ||||||
|  | e2d::ERectangle::ERectangle() | ||||||
|  | { | ||||||
|  | 	this->_setRect(0, 0, 0, 0); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | e2d::ERectangle::ERectangle(float x, float y, float width, float height) | ||||||
|  | { | ||||||
|  | 	this->_setRect(x, y, x + width, y + height); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | e2d::ERectangle::ERectangle(ENode * node) | ||||||
|  | { | ||||||
|  | 	// ¼ÆËã×óÉϽÇ×ø±ê
 | ||||||
|  | 	D2D1_POINT_2F upperLeftCorner = D2D1::Point2F( | ||||||
|  | 		node->getPosX() - node->getRealWidth() * node->getAnchorX(), | ||||||
|  | 		node->getPosY() - node->getRealHeight() * node->getAnchorY() | ||||||
|  | 	); | ||||||
|  | 	this->_setRect( | ||||||
|  | 		upperLeftCorner.x, | ||||||
|  | 		upperLeftCorner.y, | ||||||
|  | 		upperLeftCorner.x + node->getRealWidth(), | ||||||
|  | 		upperLeftCorner.y + node->getRealHeight() | ||||||
|  | 	); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | void e2d::ERectangle::_setRect(float left, float top, float right, float bottom) | ||||||
|  | { | ||||||
|  | 	SafeReleaseInterface(&m_pD2dRectangle); | ||||||
|  | 
 | ||||||
|  | 	GetFactory()->CreateRectangleGeometry( | ||||||
|  | 		D2D1::RectF(left, top, right, bottom), | ||||||
|  | 		&m_pD2dRectangle | ||||||
|  | 	); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | ID2D1RectangleGeometry * e2d::ERectangle::_getD2dGeometry() const | ||||||
|  | { | ||||||
|  | 	return m_pD2dRectangle; | ||||||
|  | } | ||||||
|  | @ -1,4 +1,5 @@ | ||||||
| #include "..\emsg.h" | #include "..\elisteners.h" | ||||||
|  | #include "..\emanagers.h" | ||||||
| 
 | 
 | ||||||
| e2d::EKeyboardListener::EKeyboardListener() | e2d::EKeyboardListener::EKeyboardListener() | ||||||
| 	: EListener() | 	: EListener() | ||||||
|  |  | ||||||
|  | @ -1,4 +1,4 @@ | ||||||
| #include "..\emsg.h" | #include "..\elisteners.h" | ||||||
| 
 | 
 | ||||||
| e2d::EKeyboardPressListener::EKeyboardPressListener() | e2d::EKeyboardPressListener::EKeyboardPressListener() | ||||||
| 	: EKeyboardListener() | 	: EKeyboardListener() | ||||||
|  |  | ||||||
|  | @ -1,9 +1,8 @@ | ||||||
| #include "..\emsg.h" | #include "..\elisteners.h" | ||||||
| 
 | 
 | ||||||
| e2d::EListener::EListener() | e2d::EListener::EListener() | ||||||
| 	: m_bRunning(false) | 	: m_bRunning(false) | ||||||
| 	, m_bAlways(false) | 	, m_bAlways(false) | ||||||
| 	, m_pParentScene(nullptr) |  | ||||||
| 	, m_pParentNode(nullptr) | 	, m_pParentNode(nullptr) | ||||||
| { | { | ||||||
| } | } | ||||||
|  | @ -34,11 +33,6 @@ e2d::EString e2d::EListener::getName() const | ||||||
| 	return m_sName; | 	return m_sName; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| e2d::EScene * e2d::EListener::getParentScene() const |  | ||||||
| { |  | ||||||
| 	return m_pParentScene; |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| e2d::ENode * e2d::EListener::getParentNode() const | e2d::ENode * e2d::EListener::getParentNode() const | ||||||
| { | { | ||||||
| 	return m_pParentNode; | 	return m_pParentNode; | ||||||
|  |  | ||||||
|  | @ -1,4 +1,4 @@ | ||||||
| #include "..\emsg.h" | #include "..\elisteners.h" | ||||||
| 
 | 
 | ||||||
| e2d::EMouseClickListener::EMouseClickListener() | e2d::EMouseClickListener::EMouseClickListener() | ||||||
| 	: EMouseListener() | 	: EMouseListener() | ||||||
|  |  | ||||||
|  | @ -1,4 +1,4 @@ | ||||||
| #include "..\emsg.h" | #include "..\elisteners.h" | ||||||
| 
 | 
 | ||||||
| e2d::EMouseDoubleClickListener::EMouseDoubleClickListener() | e2d::EMouseDoubleClickListener::EMouseDoubleClickListener() | ||||||
| 	: EMouseListener() | 	: EMouseListener() | ||||||
|  |  | ||||||
|  | @ -1,4 +1,4 @@ | ||||||
| #include "..\emsg.h" | #include "..\elisteners.h" | ||||||
| 
 | 
 | ||||||
| e2d::EMouseDragListener::EMouseDragListener() | e2d::EMouseDragListener::EMouseDragListener() | ||||||
| 	: EMouseListener() | 	: EMouseListener() | ||||||
|  |  | ||||||
|  | @ -1,4 +1,5 @@ | ||||||
| #include "..\emsg.h" | #include "..\elisteners.h" | ||||||
|  | #include "..\emanagers.h" | ||||||
| 
 | 
 | ||||||
| e2d::EMouseListener::EMouseListener() | e2d::EMouseListener::EMouseListener() | ||||||
| 	: EListener() | 	: EListener() | ||||||
|  |  | ||||||
|  | @ -1,4 +1,4 @@ | ||||||
| #include "..\emsg.h" | #include "..\elisteners.h" | ||||||
| 
 | 
 | ||||||
| e2d::EMousePressListener::EMousePressListener() | e2d::EMousePressListener::EMousePressListener() | ||||||
| 	: EMouseListener() | 	: EMouseListener() | ||||||
|  |  | ||||||
|  | @ -1,4 +1,4 @@ | ||||||
| #include "..\etools.h" | #include "..\emanagers.h" | ||||||
| #include "..\eactions.h" | #include "..\eactions.h" | ||||||
| #include "..\Win\winbase.h" | #include "..\Win\winbase.h" | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -1,12 +1,9 @@ | ||||||
| #include "..\emsg.h" | #include "..\emanagers.h" | ||||||
|  | #include "..\elisteners.h" | ||||||
| #include "..\enodes.h" | #include "..\enodes.h" | ||||||
| #include "..\Win\winbase.h" | #include "..\Win\winbase.h" | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| // Êó±êÏûÏ¢
 |  | ||||||
| e2d::EMouseMsg s_MouseMsg; |  | ||||||
| // °´¼üÏûÏ¢
 |  | ||||||
| e2d::EKeyboardMsg s_KeyboardMsg; |  | ||||||
| // 鼠标消息监听器
 | // 鼠标消息监听器
 | ||||||
| e2d::EVector<e2d::EMouseListener*> s_vMouseListeners; | e2d::EVector<e2d::EMouseListener*> s_vMouseListeners; | ||||||
| // 按键消息监听器
 | // 按键消息监听器
 | ||||||
|  | @ -16,9 +13,9 @@ e2d::EVector<e2d::EKeyboardListener*> s_vKeyboardListeners; | ||||||
| void e2d::EMsgManager::MouseProc(UINT message, WPARAM wParam, LPARAM lParam) | void e2d::EMsgManager::MouseProc(UINT message, WPARAM wParam, LPARAM lParam) | ||||||
| { | { | ||||||
| 	// 保存鼠标消息
 | 	// 保存鼠标消息
 | ||||||
| 	s_MouseMsg.m_nMsg = message; | 	EMouseMsg::getMouseMsg().m_nMsg = message; | ||||||
| 	s_MouseMsg.m_wParam = wParam; | 	EMouseMsg::getMouseMsg().m_wParam = wParam; | ||||||
| 	s_MouseMsg.m_lParam = lParam; | 	EMouseMsg::getMouseMsg().m_lParam = lParam; | ||||||
| 	// 执行鼠标消息监听函数
 | 	// 执行鼠标消息监听函数
 | ||||||
| 	for (size_t i = 0; i < s_vMouseListeners.size(); i++) | 	for (size_t i = 0; i < s_vMouseListeners.size(); i++) | ||||||
| 	{ | 	{ | ||||||
|  | @ -29,8 +26,8 @@ void e2d::EMsgManager::MouseProc(UINT message, WPARAM wParam, LPARAM lParam) | ||||||
| 
 | 
 | ||||||
| 		if (mlistener->isRunning()) | 		if (mlistener->isRunning()) | ||||||
| 		{ | 		{ | ||||||
| 			if (mlistener->getParentScene() == EApp::getCurrentScene() || | 			if (mlistener->getParentNode() &&  | ||||||
| 				(mlistener->getParentNode() && mlistener->getParentNode()->getParentScene() == EApp::getCurrentScene())) | 				mlistener->getParentNode()->getParentScene() == EApp::getCurrentScene()) | ||||||
| 			{ | 			{ | ||||||
| 				mlistener->_callOn(); | 				mlistener->_callOn(); | ||||||
| 			} | 			} | ||||||
|  | @ -41,9 +38,9 @@ void e2d::EMsgManager::MouseProc(UINT message, WPARAM wParam, LPARAM lParam) | ||||||
| void e2d::EMsgManager::KeyboardProc(UINT message, WPARAM wParam, LPARAM lParam) | void e2d::EMsgManager::KeyboardProc(UINT message, WPARAM wParam, LPARAM lParam) | ||||||
| { | { | ||||||
| 	// 保存按键消息
 | 	// 保存按键消息
 | ||||||
| 	s_KeyboardMsg.m_nMsg = message; | 	EKeyboardMsg::getKeyboardMsg().m_nMsg = message; | ||||||
| 	s_KeyboardMsg.m_wParam = wParam; | 	EKeyboardMsg::getKeyboardMsg().m_wParam = wParam; | ||||||
| 	s_KeyboardMsg.m_lParam = lParam; | 	EKeyboardMsg::getKeyboardMsg().m_lParam = lParam; | ||||||
| 	// 执行按键消息监听函数
 | 	// 执行按键消息监听函数
 | ||||||
| 	for (size_t i = 0; i < s_vKeyboardListeners.size(); i++) | 	for (size_t i = 0; i < s_vKeyboardListeners.size(); i++) | ||||||
| 	{ | 	{ | ||||||
|  | @ -54,8 +51,8 @@ void e2d::EMsgManager::KeyboardProc(UINT message, WPARAM wParam, LPARAM lParam) | ||||||
| 
 | 
 | ||||||
| 		if (klistener->isRunning()) | 		if (klistener->isRunning()) | ||||||
| 		{ | 		{ | ||||||
| 			if (klistener->getParentScene() == EApp::getCurrentScene() || | 			if (klistener->getParentNode() &&  | ||||||
| 				(klistener->getParentNode() && klistener->getParentNode()->getParentScene() == EApp::getCurrentScene())) | 				klistener->getParentNode()->getParentScene() == EApp::getCurrentScene()) | ||||||
| 			{ | 			{ | ||||||
| 				klistener->_callOn(); | 				klistener->_callOn(); | ||||||
| 			} | 			} | ||||||
|  | @ -63,159 +60,28 @@ void e2d::EMsgManager::KeyboardProc(UINT message, WPARAM wParam, LPARAM lParam) | ||||||
| 	} | 	} | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| 
 |  | ||||||
| DWORD e2d::EMouseMsg::getPosX() |  | ||||||
| { |  | ||||||
| 	return LOWORD(s_MouseMsg.m_lParam); |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| DWORD e2d::EMouseMsg::getPosY() |  | ||||||
| { |  | ||||||
| 	return HIWORD(s_MouseMsg.m_lParam); |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| e2d::EPoint e2d::EMouseMsg::getPos() |  | ||||||
| { |  | ||||||
| 	return EPoint(LOWORD(s_MouseMsg.m_lParam), HIWORD(s_MouseMsg.m_lParam)); |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| bool e2d::EMouseMsg::isLButtonDown() |  | ||||||
| { |  | ||||||
| 	return GET_KEYSTATE_WPARAM(s_MouseMsg.m_wParam) == MK_LBUTTON; |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| bool e2d::EMouseMsg::isMButtonDown() |  | ||||||
| { |  | ||||||
| 	return GET_KEYSTATE_WPARAM(s_MouseMsg.m_wParam) == MK_MBUTTON; |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| bool e2d::EMouseMsg::isRButtonDown() |  | ||||||
| { |  | ||||||
| 	return GET_KEYSTATE_WPARAM(s_MouseMsg.m_wParam) == MK_RBUTTON; |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| bool e2d::EMouseMsg::isShiftDown() |  | ||||||
| { |  | ||||||
| 	return GET_KEYSTATE_WPARAM(s_MouseMsg.m_wParam) == MK_SHIFT; |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| bool e2d::EMouseMsg::isCtrlDown() |  | ||||||
| { |  | ||||||
| 	return GET_KEYSTATE_WPARAM(s_MouseMsg.m_wParam) == MK_CONTROL; |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| DWORD e2d::EMouseMsg::getWheelDelta() |  | ||||||
| { |  | ||||||
| 	return GET_WHEEL_DELTA_WPARAM(s_MouseMsg.m_wParam); |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| e2d::EMouseMsg::MOUSE_MSG e2d::EMouseMsg::getMsg() |  | ||||||
| { |  | ||||||
| 	return MOUSE_MSG(s_MouseMsg.m_nMsg); |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| e2d::EKeyboardMsg::KEYBOARD_MSG e2d::EKeyboardMsg::getMsg() |  | ||||||
| { |  | ||||||
| 	return KEYBOARD_MSG(s_KeyboardMsg.m_nMsg); |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| e2d::EKeyboardMsg::KEY e2d::EKeyboardMsg::getVal() |  | ||||||
| { |  | ||||||
| 	return KEY(s_KeyboardMsg.m_wParam); |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| DWORD e2d::EKeyboardMsg::getCount() |  | ||||||
| { |  | ||||||
| 	return (((DWORD)s_KeyboardMsg.m_lParam) & 0x0000FFFF); |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| bool e2d::EKeyboardMsg::isKeyDown(KEY key) |  | ||||||
| { |  | ||||||
| 	if (::GetAsyncKeyState((int)key) & 0x8000) |  | ||||||
| 	{ |  | ||||||
| 		return true; |  | ||||||
| 	} |  | ||||||
| 	return false; |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| bool e2d::EKeyboardMsg::isCapitalLockOn() |  | ||||||
| { |  | ||||||
| 	if (::GetKeyState(VK_CAPITAL) & 0x0001) |  | ||||||
| 	{ |  | ||||||
| 		return true; |  | ||||||
| 	} |  | ||||||
| 	return false; |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| bool e2d::EKeyboardMsg::isNumpadLockOn() |  | ||||||
| { |  | ||||||
| 	if (::GetKeyState(VK_NUMLOCK) & 0x0001) |  | ||||||
| 	{ |  | ||||||
| 		return true; |  | ||||||
| 	} |  | ||||||
| 	return false; |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| bool e2d::EKeyboardMsg::isScrollLockOn() |  | ||||||
| { |  | ||||||
| 	if (::GetKeyState(VK_SCROLL) & 0x0001) |  | ||||||
| 	{ |  | ||||||
| 		return true; |  | ||||||
| 	} |  | ||||||
| 	return false; |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| void e2d::EMsgManager::bindListener(e2d::EMouseListener * listener, EScene * pParentScene, bool always /* = false */) | void e2d::EMsgManager::bindListener(e2d::EMouseListener * listener, EScene * pParentScene, bool always /* = false */) | ||||||
| { | { | ||||||
| 	ASSERT( | 	EMsgManager::bindListener(listener, pParentScene->getRoot(), always); | ||||||
| 		(!listener->m_pParentNode) && (!listener->m_pParentScene), |  | ||||||
| 		"The listener is already binded, it cannot bind again!" |  | ||||||
| 	); |  | ||||||
| 	WARN_IF(listener == nullptr, "EMouseListener NULL pointer exception!"); |  | ||||||
| 	WARN_IF(pParentScene == nullptr, "Bind EMouseListener with a NULL EScene pointer!"); |  | ||||||
| 
 |  | ||||||
| 	if (listener && pParentScene) |  | ||||||
| 	{ |  | ||||||
| 		listener->start(); |  | ||||||
| 		listener->retain(); |  | ||||||
| 		listener->m_pParentScene = pParentScene; |  | ||||||
| 		listener->m_bAlways = always; |  | ||||||
| 		s_vMouseListeners.push_back(listener); |  | ||||||
| 	} |  | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void e2d::EMsgManager::bindListener(EKeyboardListener * listener, EScene * pParentScene, bool always /* = false */) | void e2d::EMsgManager::bindListener(EKeyboardListener * listener, EScene * pParentScene, bool always /* = false */) | ||||||
| { | { | ||||||
| 	ASSERT( | 	EMsgManager::bindListener(listener, pParentScene->getRoot(), always); | ||||||
| 		(!listener->m_pParentNode) && (!listener->m_pParentScene), |  | ||||||
| 		"The listener is already binded, it cannot bind again!" |  | ||||||
| 	); |  | ||||||
| 	WARN_IF(listener == nullptr, "EKeyboardListener NULL pointer exception!"); |  | ||||||
| 	WARN_IF(pParentScene == nullptr, "Bind EKeyboardListener with a NULL EScene pointer!"); |  | ||||||
| 
 |  | ||||||
| 	if (listener && pParentScene) |  | ||||||
| 	{ |  | ||||||
| 		listener->start(); |  | ||||||
| 		listener->retain(); |  | ||||||
| 		listener->m_pParentScene = pParentScene; |  | ||||||
| 		listener->m_bAlways = always; |  | ||||||
| 		s_vKeyboardListeners.push_back(listener); |  | ||||||
| 	} |  | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void e2d::EMsgManager::bindListener(EMouseListener * listener, ENode * pParentNode, bool always /* = false */) | void e2d::EMsgManager::bindListener(EMouseListener * listener, ENode * pParentNode, bool always /* = false */) | ||||||
| { | { | ||||||
| 	ASSERT( |  | ||||||
| 		(!listener->m_pParentNode) && (!listener->m_pParentScene), |  | ||||||
| 		"The listener is already binded, it cannot bind again!" |  | ||||||
| 	); |  | ||||||
| 	WARN_IF(listener == nullptr, "EMouseListener NULL pointer exception!"); | 	WARN_IF(listener == nullptr, "EMouseListener NULL pointer exception!"); | ||||||
| 	WARN_IF(pParentNode == nullptr, "Bind EMouseListener with a NULL ENode pointer!"); | 	WARN_IF(pParentNode == nullptr, "Bind EMouseListener with a NULL ENode pointer!"); | ||||||
| 
 | 
 | ||||||
| 	if (listener && pParentNode) | 	if (listener && pParentNode) | ||||||
| 	{ | 	{ | ||||||
|  | 		ASSERT( | ||||||
|  | 			!listener->m_pParentNode, | ||||||
|  | 			"The listener is already binded, it cannot bind again!" | ||||||
|  | 		); | ||||||
|  | 
 | ||||||
| 		listener->start(); | 		listener->start(); | ||||||
| 		listener->retain(); | 		listener->retain(); | ||||||
| 		listener->m_bAlways = always; | 		listener->m_bAlways = always; | ||||||
|  | @ -226,15 +92,16 @@ void e2d::EMsgManager::bindListener(EMouseListener * listener, ENode * pParentNo | ||||||
| 
 | 
 | ||||||
| void e2d::EMsgManager::bindListener(EKeyboardListener * listener, ENode * pParentNode, bool always /* = false */) | void e2d::EMsgManager::bindListener(EKeyboardListener * listener, ENode * pParentNode, bool always /* = false */) | ||||||
| { | { | ||||||
| 	ASSERT( |  | ||||||
| 		(!listener->m_pParentNode) && (!listener->m_pParentScene), |  | ||||||
| 		"The listener is already binded, it cannot bind again!" |  | ||||||
| 	); |  | ||||||
| 	WARN_IF(listener == nullptr, "EKeyboardListener NULL pointer exception!"); | 	WARN_IF(listener == nullptr, "EKeyboardListener NULL pointer exception!"); | ||||||
| 	WARN_IF(pParentNode == nullptr, "Bind EKeyboardListener with a NULL ENode pointer!"); | 	WARN_IF(pParentNode == nullptr, "Bind EKeyboardListener with a NULL ENode pointer!"); | ||||||
| 
 | 
 | ||||||
| 	if (listener && pParentNode) | 	if (listener && pParentNode) | ||||||
| 	{ | 	{ | ||||||
|  | 		ASSERT( | ||||||
|  | 			!listener->m_pParentNode, | ||||||
|  | 			"The listener is already binded, it cannot bind again!" | ||||||
|  | 		); | ||||||
|  | 
 | ||||||
| 		listener->start(); | 		listener->start(); | ||||||
| 		listener->retain(); | 		listener->retain(); | ||||||
| 		listener->m_pParentNode = pParentNode; | 		listener->m_pParentNode = pParentNode; | ||||||
|  | @ -327,32 +194,12 @@ void e2d::EMsgManager::delKeyboardListeners(const EString & name) | ||||||
| 
 | 
 | ||||||
| void e2d::EMsgManager::startAllMouseListenersBindedWith(EScene * pParentScene) | void e2d::EMsgManager::startAllMouseListenersBindedWith(EScene * pParentScene) | ||||||
| { | { | ||||||
| 	for (auto l : s_vMouseListeners) | 	EMsgManager::startAllMouseListenersBindedWith(pParentScene->getRoot()); | ||||||
| 	{ |  | ||||||
| 		if (l->getParentScene() == pParentScene) |  | ||||||
| 		{ |  | ||||||
| 			l->start(); |  | ||||||
| 		} |  | ||||||
| 	} |  | ||||||
| 	for (auto child : pParentScene->getChildren()) |  | ||||||
| 	{ |  | ||||||
| 		EMsgManager::startAllMouseListenersBindedWith(child); |  | ||||||
| 	} |  | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void e2d::EMsgManager::stopAllMouseListenersBindedWith(EScene * pParentScene) | void e2d::EMsgManager::stopAllMouseListenersBindedWith(EScene * pParentScene) | ||||||
| { | { | ||||||
| 	for (auto l : s_vMouseListeners) | 	EMsgManager::stopAllMouseListenersBindedWith(pParentScene->getRoot()); | ||||||
| 	{ |  | ||||||
| 		if (l->getParentScene() == pParentScene) |  | ||||||
| 		{ |  | ||||||
| 			l->stop(); |  | ||||||
| 		} |  | ||||||
| 	} |  | ||||||
| 	for (auto child : pParentScene->getChildren()) |  | ||||||
| 	{ |  | ||||||
| 		EMsgManager::stopAllMouseListenersBindedWith(child); |  | ||||||
| 	} |  | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void e2d::EMsgManager::startAllMouseListenersBindedWith(ENode * pParentNode) | void e2d::EMsgManager::startAllMouseListenersBindedWith(ENode * pParentNode) | ||||||
|  | @ -387,32 +234,12 @@ void e2d::EMsgManager::stopAllMouseListenersBindedWith(ENode * pParentNode) | ||||||
| 
 | 
 | ||||||
| void e2d::EMsgManager::startAllKeyboardListenersBindedWith(EScene * pParentScene) | void e2d::EMsgManager::startAllKeyboardListenersBindedWith(EScene * pParentScene) | ||||||
| { | { | ||||||
| 	for (auto l : s_vKeyboardListeners) | 	EMsgManager::startAllKeyboardListenersBindedWith(pParentScene->getRoot()); | ||||||
| 	{ |  | ||||||
| 		if (l->getParentScene() == pParentScene) |  | ||||||
| 		{ |  | ||||||
| 			l->start(); |  | ||||||
| 		} |  | ||||||
| 	} |  | ||||||
| 	for (auto child : pParentScene->getChildren()) |  | ||||||
| 	{ |  | ||||||
| 		EMsgManager::startAllKeyboardListenersBindedWith(child); |  | ||||||
| 	} |  | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void e2d::EMsgManager::stopAllKeyboardListenersBindedWith(EScene * pParentScene) | void e2d::EMsgManager::stopAllKeyboardListenersBindedWith(EScene * pParentScene) | ||||||
| { | { | ||||||
| 	for (auto l : s_vKeyboardListeners) | 	EMsgManager::stopAllKeyboardListenersBindedWith(pParentScene->getRoot()); | ||||||
| 	{ |  | ||||||
| 		if (l->getParentScene() == pParentScene) |  | ||||||
| 		{ |  | ||||||
| 			l->stop(); |  | ||||||
| 		} |  | ||||||
| 	} |  | ||||||
| 	for (auto child : pParentScene->getChildren()) |  | ||||||
| 	{ |  | ||||||
| 		EMsgManager::stopAllKeyboardListenersBindedWith(child); |  | ||||||
| 	} |  | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void e2d::EMsgManager::startAllKeyboardListenersBindedWith(ENode * pParentNode) | void e2d::EMsgManager::startAllKeyboardListenersBindedWith(ENode * pParentNode) | ||||||
|  | @ -445,40 +272,6 @@ void e2d::EMsgManager::stopAllKeyboardListenersBindedWith(ENode * pParentNode) | ||||||
| 	} | 	} | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void e2d::EMsgManager::_clearAllMouseListenersBindedWith(EScene * pParentScene) |  | ||||||
| { |  | ||||||
| 	for (size_t i = 0; i < s_vMouseListeners.size();) |  | ||||||
| 	{ |  | ||||||
| 		auto t = s_vMouseListeners[i]; |  | ||||||
| 		if (t->getParentScene() == pParentScene) |  | ||||||
| 		{ |  | ||||||
| 			SafeReleaseAndClear(&t); |  | ||||||
| 			s_vMouseListeners.erase(s_vMouseListeners.begin() + i); |  | ||||||
| 		} |  | ||||||
| 		else |  | ||||||
| 		{ |  | ||||||
| 			i++; |  | ||||||
| 		} |  | ||||||
| 	} |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| void e2d::EMsgManager::_clearAllKeyboardListenersBindedWith(EScene * pParentScene) |  | ||||||
| { |  | ||||||
| 	for (size_t i = 0; i < s_vKeyboardListeners.size();) |  | ||||||
| 	{ |  | ||||||
| 		auto t = s_vKeyboardListeners[i]; |  | ||||||
| 		if (t->getParentScene() == pParentScene) |  | ||||||
| 		{ |  | ||||||
| 			SafeReleaseAndClear(&t); |  | ||||||
| 			s_vKeyboardListeners.erase(s_vKeyboardListeners.begin() + i); |  | ||||||
| 		} |  | ||||||
| 		else |  | ||||||
| 		{ |  | ||||||
| 			i++; |  | ||||||
| 		} |  | ||||||
| 	} |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| void e2d::EMsgManager::_clearAllMouseListenersBindedWith(ENode * pParentNode) | void e2d::EMsgManager::_clearAllMouseListenersBindedWith(ENode * pParentNode) | ||||||
| { | { | ||||||
| 	for (size_t i = 0; i < s_vMouseListeners.size();) | 	for (size_t i = 0; i < s_vMouseListeners.size();) | ||||||
|  |  | ||||||
|  | @ -1,4 +1,5 @@ | ||||||
| #include "..\etools.h" | #include "..\emanagers.h" | ||||||
|  | #include "..\ebase.h" | ||||||
| 
 | 
 | ||||||
| // EObjectManager 释放池的实现机制:
 | // EObjectManager 释放池的实现机制:
 | ||||||
| // EObject 类中的引用计数(m_nRefCount)保证了指针的使用安全
 | // EObject 类中的引用计数(m_nRefCount)保证了指针的使用安全
 | ||||||
|  |  | ||||||
|  | @ -0,0 +1,26 @@ | ||||||
|  | #include "..\emanagers.h" | ||||||
|  | #include "..\egeometry.h" | ||||||
|  | 
 | ||||||
|  | e2d::EVector<e2d::EGeometry*> s_vGeometries; | ||||||
|  | 
 | ||||||
|  | void e2d::EPhysicsManager::bindWith(EGeometry * geometry, ENode * node) | ||||||
|  | { | ||||||
|  | 	WARN_IF(geometry == nullptr, "EGeometry NULL pointer exception!"); | ||||||
|  | 	WARN_IF(node == nullptr, "EGeometry add to a NULL ENode pointer!"); | ||||||
|  | 
 | ||||||
|  | 	if (geometry && node) | ||||||
|  | 	{ | ||||||
|  | 		ASSERT( | ||||||
|  | 			!geometry->m_pParentNode, | ||||||
|  | 			"The geometry is already added, it cannot bind again!" | ||||||
|  | 		); | ||||||
|  | 
 | ||||||
|  | 		geometry->retain(); | ||||||
|  | 		geometry->m_pParentNode = node; | ||||||
|  | 		s_vGeometries.push_back(geometry); | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | void e2d::EPhysicsManager::PhysicsProc() | ||||||
|  | { | ||||||
|  | } | ||||||
|  | @ -1,3 +1,4 @@ | ||||||
|  | #include "..\emanagers.h" | ||||||
| #include "..\etools.h" | #include "..\etools.h" | ||||||
| #include "..\enodes.h" | #include "..\enodes.h" | ||||||
| #include "..\Win\winbase.h" | #include "..\Win\winbase.h" | ||||||
|  | @ -15,8 +16,8 @@ void e2d::ETimerManager::TimerProc() | ||||||
| 		auto &t = s_vTimers[i]; | 		auto &t = s_vTimers[i]; | ||||||
| 		if (t->isRunning()) | 		if (t->isRunning()) | ||||||
| 		{ | 		{ | ||||||
| 			if (t->getParentScene() == EApp::getCurrentScene() || | 			if (t->getParentNode() &&  | ||||||
| 				(t->getParentNode() && (t->getParentNode()->getParentScene() == EApp::getCurrentScene()))) | 				t->getParentNode()->getParentScene() == EApp::getCurrentScene()) | ||||||
| 			{ | 			{ | ||||||
| 				if (t->_isReady()) | 				if (t->_isReady()) | ||||||
| 				{ | 				{ | ||||||
|  | @ -29,33 +30,21 @@ void e2d::ETimerManager::TimerProc() | ||||||
| 
 | 
 | ||||||
| void e2d::ETimerManager::bindTimer(ETimer * timer, EScene * pParentScene) | void e2d::ETimerManager::bindTimer(ETimer * timer, EScene * pParentScene) | ||||||
| { | { | ||||||
| 	ASSERT( | 	ETimerManager::bindTimer(timer, pParentScene->getRoot()); | ||||||
| 		(!timer->m_pParentScene) && (!timer->m_pParentNode), |  | ||||||
| 		"The timer is already binded, it cannot bind again!" |  | ||||||
| 	); |  | ||||||
| 	WARN_IF(timer == nullptr, "ETimer NULL pointer exception!"); |  | ||||||
| 	WARN_IF(pParentScene == nullptr, "Bind ETimer with a NULL EScene pointer!"); |  | ||||||
| 
 |  | ||||||
| 	if (timer && pParentScene) |  | ||||||
| 	{ |  | ||||||
| 		timer->start(); |  | ||||||
| 		timer->retain(); |  | ||||||
| 		timer->m_pParentScene = pParentScene; |  | ||||||
| 		s_vTimers.push_back(timer); |  | ||||||
| 	} |  | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void e2d::ETimerManager::bindTimer(ETimer * timer, ENode * pParentNode) | void e2d::ETimerManager::bindTimer(ETimer * timer, ENode * pParentNode) | ||||||
| { | { | ||||||
| 	ASSERT( |  | ||||||
| 		(!timer->m_pParentScene) && (!timer->m_pParentNode), |  | ||||||
| 		"The timer is already binded, it cannot bind again!" |  | ||||||
| 	); |  | ||||||
| 	WARN_IF(timer == nullptr, "ETimer NULL pointer exception!"); | 	WARN_IF(timer == nullptr, "ETimer NULL pointer exception!"); | ||||||
| 	WARN_IF(pParentNode == nullptr, "Bind ETimer with a NULL ENode pointer!"); | 	WARN_IF(pParentNode == nullptr, "Bind ETimer with a NULL ENode pointer!"); | ||||||
| 
 | 
 | ||||||
| 	if (timer && pParentNode) | 	if (timer && pParentNode) | ||||||
| 	{ | 	{ | ||||||
|  | 		ASSERT( | ||||||
|  | 			!timer->m_pParentNode, | ||||||
|  | 			"The timer is already binded, it cannot bind again!" | ||||||
|  | 		); | ||||||
|  | 
 | ||||||
| 		timer->start(); | 		timer->start(); | ||||||
| 		timer->retain(); | 		timer->retain(); | ||||||
| 		timer->m_pParentNode = pParentNode; | 		timer->m_pParentNode = pParentNode; | ||||||
|  | @ -104,49 +93,12 @@ void e2d::ETimerManager::delTimers(const EString & name) | ||||||
| 
 | 
 | ||||||
| void e2d::ETimerManager::startAllTimersBindedWith(EScene * pParentScene) | void e2d::ETimerManager::startAllTimersBindedWith(EScene * pParentScene) | ||||||
| { | { | ||||||
| 	for (auto t : s_vTimers) | 	ETimerManager::startAllTimersBindedWith(pParentScene->getRoot()); | ||||||
| 	{ |  | ||||||
| 		if (t->getParentScene() == pParentScene) |  | ||||||
| 		{ |  | ||||||
| 			t->start(); |  | ||||||
| 		} |  | ||||||
| 	} |  | ||||||
| 	for (auto child : pParentScene->getChildren()) |  | ||||||
| 	{ |  | ||||||
| 		ETimerManager::startAllTimersBindedWith(child); |  | ||||||
| 	} |  | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void e2d::ETimerManager::stopAllTimersBindedWith(EScene * pParentScene) | void e2d::ETimerManager::stopAllTimersBindedWith(EScene * pParentScene) | ||||||
| { | { | ||||||
| 	for (auto t : s_vTimers) | 	ETimerManager::stopAllTimersBindedWith(pParentScene->getRoot()); | ||||||
| 	{ |  | ||||||
| 		if (t->getParentScene() == pParentScene) |  | ||||||
| 		{ |  | ||||||
| 			t->stop(); |  | ||||||
| 		} |  | ||||||
| 	} |  | ||||||
| 	for (auto child : pParentScene->getChildren()) |  | ||||||
| 	{ |  | ||||||
| 		ETimerManager::stopAllTimersBindedWith(child); |  | ||||||
| 	} |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| void e2d::ETimerManager::_clearAllTimersBindedWith(EScene * pParentScene) |  | ||||||
| { |  | ||||||
| 	for (size_t i = 0; i < s_vTimers.size();) |  | ||||||
| 	{ |  | ||||||
| 		auto t = s_vTimers[i]; |  | ||||||
| 		if (t->getParentScene() == pParentScene) |  | ||||||
| 		{ |  | ||||||
| 			SafeReleaseAndClear(&t); |  | ||||||
| 			s_vTimers.erase(s_vTimers.begin() + i); |  | ||||||
| 		} |  | ||||||
| 		else |  | ||||||
| 		{ |  | ||||||
| 			i++; |  | ||||||
| 		} |  | ||||||
| 	} |  | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void e2d::ETimerManager::startAllTimersBindedWith(ENode * pParentNode) | void e2d::ETimerManager::startAllTimersBindedWith(ENode * pParentNode) | ||||||
|  |  | ||||||
|  | @ -1,5 +1,6 @@ | ||||||
| #include "..\enodes.h" | #include "..\enodes.h" | ||||||
| #include "..\emsg.h" | #include "..\elisteners.h" | ||||||
|  | #include "..\emanagers.h" | ||||||
| #include "..\Win\winbase.h" | #include "..\Win\winbase.h" | ||||||
| 
 | 
 | ||||||
| e2d::EButton::EButton() | e2d::EButton::EButton() | ||||||
|  |  | ||||||
|  | @ -3,6 +3,7 @@ | ||||||
| 
 | 
 | ||||||
| e2d::EFont::EFont() | e2d::EFont::EFont() | ||||||
| 	: m_pTextFormat(nullptr) | 	: m_pTextFormat(nullptr) | ||||||
|  | 	, m_Color(EColor::WHITE) | ||||||
| 	, m_fFontSize(22) | 	, m_fFontSize(22) | ||||||
| 	, m_FontWeight(EFontWeight::REGULAR) | 	, m_FontWeight(EFontWeight::REGULAR) | ||||||
| 	, m_bItalic(false) | 	, m_bItalic(false) | ||||||
|  | @ -10,10 +11,11 @@ e2d::EFont::EFont() | ||||||
| { | { | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| e2d::EFont::EFont(EString fontFamily, float fontSize, EFontWeight fontWeight, bool italic) | e2d::EFont::EFont(EString fontFamily, float fontSize /* = 22 */, UINT32 color /* = EColor::WHITE */, UINT32 fontWeight, bool italic /* = false */) | ||||||
| { | { | ||||||
| 	this->setFamily(fontFamily); | 	this->setFamily(fontFamily); | ||||||
| 	this->setSize(fontSize); | 	this->setSize(fontSize); | ||||||
|  | 	this->setColor(color); | ||||||
| 	this->setWeight(fontWeight); | 	this->setWeight(fontWeight); | ||||||
| 	this->setItalic(italic); | 	this->setItalic(italic); | ||||||
| } | } | ||||||
|  | @ -28,11 +30,16 @@ float e2d::EFont::getFontSize() const | ||||||
| 	return m_fFontSize; | 	return m_fFontSize; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| e2d::EFontWeight e2d::EFont::getFontWeight() const | UINT32 e2d::EFont::getFontWeight() const | ||||||
| { | { | ||||||
| 	return m_FontWeight; | 	return m_FontWeight; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | UINT32 e2d::EFont::getColor() const | ||||||
|  | { | ||||||
|  | 	return m_Color; | ||||||
|  | } | ||||||
|  | 
 | ||||||
| bool e2d::EFont::isItalic() const | bool e2d::EFont::isItalic() const | ||||||
| { | { | ||||||
| 	return m_bItalic; | 	return m_bItalic; | ||||||
|  | @ -50,12 +57,17 @@ void e2d::EFont::setSize(float fontSize) | ||||||
| 	m_bRecreateNeeded = true; | 	m_bRecreateNeeded = true; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void e2d::EFont::setWeight(EFontWeight fontWeight) | void e2d::EFont::setWeight(UINT32 fontWeight) | ||||||
| { | { | ||||||
| 	m_FontWeight = fontWeight; | 	m_FontWeight = fontWeight; | ||||||
| 	m_bRecreateNeeded = true; | 	m_bRecreateNeeded = true; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | void e2d::EFont::setColor(UINT32 color) | ||||||
|  | { | ||||||
|  | 	m_Color = color; | ||||||
|  | } | ||||||
|  | 
 | ||||||
| void e2d::EFont::setItalic(bool value) | void e2d::EFont::setItalic(bool value) | ||||||
| { | { | ||||||
| 	m_bItalic = value; | 	m_bItalic = value; | ||||||
|  | @ -69,7 +81,7 @@ void e2d::EFont::_initTextFormat() | ||||||
| 	HRESULT hr = GetDirectWriteFactory()->CreateTextFormat( | 	HRESULT hr = GetDirectWriteFactory()->CreateTextFormat( | ||||||
| 		m_sFontFamily.c_str(), | 		m_sFontFamily.c_str(), | ||||||
| 		NULL,                          // Font collection(NULL sets it to the system font collection)
 | 		NULL,                          // Font collection(NULL sets it to the system font collection)
 | ||||||
| 		DWRITE_FONT_WEIGHT(m_FontWeight.value), | 		DWRITE_FONT_WEIGHT(m_FontWeight), | ||||||
| 		m_bItalic ? DWRITE_FONT_STYLE_ITALIC : DWRITE_FONT_STYLE_NORMAL, | 		m_bItalic ? DWRITE_FONT_STYLE_ITALIC : DWRITE_FONT_STYLE_NORMAL, | ||||||
| 		DWRITE_FONT_STRETCH_NORMAL, | 		DWRITE_FONT_STRETCH_NORMAL, | ||||||
| 		m_fFontSize, | 		m_fFontSize, | ||||||
|  |  | ||||||
|  | @ -1,7 +1,8 @@ | ||||||
| #include "..\enodes.h" | #include "..\enodes.h" | ||||||
| #include "..\emsg.h" | #include "..\emanagers.h" | ||||||
| #include "..\etools.h" | #include "..\etools.h" | ||||||
| #include "..\eactions.h" | #include "..\eactions.h" | ||||||
|  | #include "..\egeometry.h" | ||||||
| #include "..\Win\winbase.h" | #include "..\Win\winbase.h" | ||||||
| #include <algorithm> | #include <algorithm> | ||||||
| 
 | 
 | ||||||
|  | @ -19,6 +20,7 @@ e2d::ENode::ENode() | ||||||
| 	, m_Matri(D2D1::Matrix3x2F::Identity()) | 	, m_Matri(D2D1::Matrix3x2F::Identity()) | ||||||
| 	, m_bVisiable(true) | 	, m_bVisiable(true) | ||||||
| 	, m_bDisplayedInScene(false) | 	, m_bDisplayedInScene(false) | ||||||
|  | 	, m_pGeometry(nullptr) | ||||||
| 	, m_pParent(nullptr) | 	, m_pParent(nullptr) | ||||||
| 	, m_pParentScene(nullptr) | 	, m_pParentScene(nullptr) | ||||||
| 	, m_nHashName(0) | 	, m_nHashName(0) | ||||||
|  | @ -43,6 +45,7 @@ e2d::ENode::~ENode() | ||||||
| 	{ | 	{ | ||||||
| 		SafeReleaseAndClear(&child); | 		SafeReleaseAndClear(&child); | ||||||
| 	} | 	} | ||||||
|  | 	SafeReleaseAndClear(&m_pGeometry); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void e2d::ENode::onEnter() | void e2d::ENode::onEnter() | ||||||
|  | @ -190,11 +193,14 @@ void e2d::ENode::_updateChildrenTransform() | ||||||
| 
 | 
 | ||||||
| void e2d::ENode::_updateTransform(ENode * node) | void e2d::ENode::_updateTransform(ENode * node) | ||||||
| { | { | ||||||
|  | 	// 计算自身的转换矩阵
 | ||||||
| 	node->_updateTransformToReal(); | 	node->_updateTransformToReal(); | ||||||
|  | 	// 和父节点矩阵相乘
 | ||||||
| 	if (node->m_pParent) | 	if (node->m_pParent) | ||||||
| 	{ | 	{ | ||||||
| 		node->m_Matri = node->m_Matri * node->m_pParent->m_Matri; | 		node->m_Matri = node->m_Matri * node->m_pParent->m_Matri; | ||||||
| 	} | 	} | ||||||
|  | 	// 转换矩阵后判断
 | ||||||
| 	// 遍历子节点下的所有节点
 | 	// 遍历子节点下的所有节点
 | ||||||
| 	node->_updateChildrenTransform(); | 	node->_updateChildrenTransform(); | ||||||
| 	node->m_bTransformChildrenNeeded = false; | 	node->m_bTransformChildrenNeeded = false; | ||||||
|  | @ -267,6 +273,16 @@ e2d::ESize e2d::ENode::getRealSize() const | ||||||
| 	return m_Size; | 	return m_Size; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | float e2d::ENode::getAnchorX() const | ||||||
|  | { | ||||||
|  | 	return m_fAnchorX; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | float e2d::ENode::getAnchorY() const | ||||||
|  | { | ||||||
|  | 	return m_fAnchorY; | ||||||
|  | } | ||||||
|  | 
 | ||||||
| e2d::ESize e2d::ENode::getSize() const | e2d::ESize e2d::ENode::getSize() const | ||||||
| { | { | ||||||
| 	return ESize(getWidth(), getHeight()); | 	return ESize(getWidth(), getHeight()); | ||||||
|  | @ -456,6 +472,11 @@ void e2d::ENode::setAnchor(float anchorX, float anchorY) | ||||||
| 	m_bTransformChildrenNeeded = true; | 	m_bTransformChildrenNeeded = true; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | void e2d::ENode::setGeometry(EGeometry * geometry) | ||||||
|  | { | ||||||
|  | 	EPhysicsManager::bindWith(geometry, this); | ||||||
|  | } | ||||||
|  | 
 | ||||||
| void e2d::ENode::addChild(ENode * child, int order  /* = 0 */) | void e2d::ENode::addChild(ENode * child, int order  /* = 0 */) | ||||||
| { | { | ||||||
| 	WARN_IF(child == nullptr, "ENode::addChild NULL pointer exception."); | 	WARN_IF(child == nullptr, "ENode::addChild NULL pointer exception."); | ||||||
|  |  | ||||||
|  | @ -24,24 +24,24 @@ e2d::ESprite::ESprite(ESpriteFrame * spriteFrame) | ||||||
| e2d::ESprite::ESprite(const EString & imageFileName) | e2d::ESprite::ESprite(const EString & imageFileName) | ||||||
| 	: ESprite() | 	: ESprite() | ||||||
| { | { | ||||||
| 	loadFrom(new ETexture(imageFileName)); | 	loadFrom(imageFileName); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| e2d::ESprite::ESprite(const EString & imageFileName, float x, float y, float width, float height) | e2d::ESprite::ESprite(const EString & imageFileName, float x, float y, float width, float height) | ||||||
| { | { | ||||||
| 	loadFrom(new ETexture(imageFileName)); | 	loadFrom(imageFileName); | ||||||
| 	clip(x, y, width, height); | 	clip(x, y, width, height); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| e2d::ESprite::ESprite(const EString & resourceName, const EString & resourceType) | e2d::ESprite::ESprite(const EString & resourceName, const EString & resourceType) | ||||||
| 	: ESprite() | 	: ESprite() | ||||||
| { | { | ||||||
| 	loadFrom(new ETexture(resourceName, resourceType)); | 	loadFrom(resourceName, resourceType); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| e2d::ESprite::ESprite(const EString & resourceName, const EString & resourceType, float x, float y, float width, float height) | e2d::ESprite::ESprite(const EString & resourceName, const EString & resourceType, float x, float y, float width, float height) | ||||||
| { | { | ||||||
| 	loadFrom(new ETexture(resourceName, resourceType)); | 	loadFrom(resourceName, resourceType); | ||||||
| 	clip(x, y, width, height); | 	clip(x, y, width, height); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | @ -64,6 +64,16 @@ void e2d::ESprite::loadFrom(ETexture * texture) | ||||||
| 	} | 	} | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | void e2d::ESprite::loadFrom(const EString & imageFileName) | ||||||
|  | { | ||||||
|  | 	loadFrom(new ETexture(imageFileName)); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | void e2d::ESprite::loadFrom(const EString & resourceName, const EString & resourceType) | ||||||
|  | { | ||||||
|  | 	loadFrom(new ETexture(resourceName, resourceType)); | ||||||
|  | } | ||||||
|  | 
 | ||||||
| void e2d::ESprite::loadFrom(ETexture * texture, float x, float y, float width, float height) | void e2d::ESprite::loadFrom(ETexture * texture, float x, float y, float width, float height) | ||||||
| { | { | ||||||
| 	loadFrom(texture); | 	loadFrom(texture); | ||||||
|  |  | ||||||
|  | @ -2,8 +2,7 @@ | ||||||
| #include "..\Win\winbase.h" | #include "..\Win\winbase.h" | ||||||
| 
 | 
 | ||||||
| e2d::EText::EText() | e2d::EText::EText() | ||||||
| 	: m_Color(EColor::WHITE) | 	: m_bWordWrapping(false) | ||||||
| 	, m_bWordWrapping(false) |  | ||||||
| 	, m_pFont(nullptr) | 	, m_pFont(nullptr) | ||||||
| 	, m_fWordWrappingWidth(0) | 	, m_fWordWrappingWidth(0) | ||||||
| { | { | ||||||
|  | @ -23,19 +22,17 @@ e2d::EText::EText(EFont * font) | ||||||
| 	this->setFont(font); | 	this->setFont(font); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| e2d::EText::EText(const EString & text, EColor color, EFont * font) | e2d::EText::EText(const EString & text, EFont * font) | ||||||
| 	: EText() | 	: EText() | ||||||
| { | { | ||||||
| 	this->setText(text); | 	this->setText(text); | ||||||
| 	this->setColor(color); |  | ||||||
| 	this->setFont(font); | 	this->setFont(font); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| e2d::EText::EText(const EString & text, EColor color, EString fontFamily, float fontSize, EFontWeight fontWeight, bool italic) | e2d::EText::EText(const EString & text, EString fontFamily, float fontSize, UINT32 color, UINT32 fontWeight, bool italic) | ||||||
| { | { | ||||||
| 	this->setText(text); | 	this->setText(text); | ||||||
| 	this->setColor(color); | 	this->setFont(new EFont(fontFamily, fontSize, color, fontWeight, italic)); | ||||||
| 	this->setFont(new EFont(fontFamily, fontSize, fontWeight, italic)); |  | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| e2d::EText::~EText() | e2d::EText::~EText() | ||||||
|  | @ -58,11 +55,6 @@ float e2d::EText::getRealWidth() const | ||||||
| 	return m_fWordWrappingWidth; | 	return m_fWordWrappingWidth; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| e2d::EColor e2d::EText::getColor() const |  | ||||||
| { |  | ||||||
| 	return m_Color; |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| e2d::EFont * e2d::EText::getFont() const | e2d::EFont * e2d::EText::getFont() const | ||||||
| { | { | ||||||
| 	return m_pFont; | 	return m_pFont; | ||||||
|  | @ -74,11 +66,6 @@ void e2d::EText::setText(const EString & text) | ||||||
| 	_initTextLayout(); | 	_initTextLayout(); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void e2d::EText::setColor(EColor color) |  | ||||||
| { |  | ||||||
| 	m_Color = color; |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| void e2d::EText::setFont(EFont * font) | void e2d::EText::setFont(EFont * font) | ||||||
| { | { | ||||||
| 	if (font) | 	if (font) | ||||||
|  | @ -105,7 +92,7 @@ void e2d::EText::setWordWrappingWidth(float wordWrapWidth) | ||||||
| 
 | 
 | ||||||
| void e2d::EText::_onRender() | void e2d::EText::_onRender() | ||||||
| { | { | ||||||
| 	GetSolidColorBrush()->SetColor(D2D1::ColorF(m_Color.value, m_fDisplayOpacity)); | 	GetSolidColorBrush()->SetColor(D2D1::ColorF(m_pFont->m_Color, m_fDisplayOpacity)); | ||||||
| 	GetRenderTarget()->DrawTextW( | 	GetRenderTarget()->DrawTextW( | ||||||
| 		m_sText.c_str(), | 		m_sText.c_str(), | ||||||
| 		UINT32(m_sText.length()), | 		UINT32(m_sText.length()), | ||||||
|  |  | ||||||
|  | @ -1,10 +1,10 @@ | ||||||
| #include "..\etools.h" | #include "..\etools.h" | ||||||
|  | #include "..\emanagers.h" | ||||||
| #include "..\Win\winbase.h" | #include "..\Win\winbase.h" | ||||||
| 
 | 
 | ||||||
| e2d::ETimer::ETimer() | e2d::ETimer::ETimer() | ||||||
| 	: m_bRunning(false) | 	: m_bRunning(false) | ||||||
| 	, m_nRunTimes(0) | 	, m_nRunTimes(0) | ||||||
| 	, m_pParentScene(nullptr) |  | ||||||
| 	, m_pParentNode(nullptr) | 	, m_pParentNode(nullptr) | ||||||
| 	, m_Callback([](int) {}) | 	, m_Callback([](int) {}) | ||||||
| 	, m_nInterval(0) | 	, m_nInterval(0) | ||||||
|  | @ -53,11 +53,6 @@ e2d::EString e2d::ETimer::getName() const | ||||||
| 	return m_sName; | 	return m_sName; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| e2d::EScene * e2d::ETimer::getParentScene() const |  | ||||||
| { |  | ||||||
| 	return m_pParentScene; |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| e2d::ENode * e2d::ETimer::getParentNode() const | e2d::ENode * e2d::ETimer::getParentNode() const | ||||||
| { | { | ||||||
| 	return m_pParentNode; | 	return m_pParentNode; | ||||||
|  |  | ||||||
|  | @ -1,6 +1,6 @@ | ||||||
| #include "..\etransitions.h" | #include "..\etransitions.h" | ||||||
| #include "..\eactions.h" | #include "..\eactions.h" | ||||||
| #include "..\etools.h" | #include "..\emanagers.h" | ||||||
| 
 | 
 | ||||||
| e2d::ETransitionEmerge::ETransitionEmerge(float emergeDuration) | e2d::ETransitionEmerge::ETransitionEmerge(float emergeDuration) | ||||||
| 	: m_fEmergeDuration(emergeDuration) | 	: m_fEmergeDuration(emergeDuration) | ||||||
|  |  | ||||||
|  | @ -1,6 +1,6 @@ | ||||||
| #include "..\etransitions.h" | #include "..\etransitions.h" | ||||||
| #include "..\eactions.h" | #include "..\eactions.h" | ||||||
| #include "..\etools.h" | #include "..\emanagers.h" | ||||||
| 
 | 
 | ||||||
| e2d::ETransitionFade::ETransitionFade(float fadeOutDuration, float fadeInDuration) | e2d::ETransitionFade::ETransitionFade(float fadeOutDuration, float fadeInDuration) | ||||||
| 	: m_fFadeOutDuration(fadeOutDuration) | 	: m_fFadeOutDuration(fadeOutDuration) | ||||||
|  |  | ||||||
|  | @ -1,6 +1,6 @@ | ||||||
| #include "..\etransitions.h" | #include "..\etransitions.h" | ||||||
| #include "..\eactions.h" | #include "..\eactions.h" | ||||||
| #include "..\etools.h" | #include "..\emanagers.h" | ||||||
| 
 | 
 | ||||||
| e2d::ETransitionMove::ETransitionMove(float moveDuration, MOVE_DIRECT direct) | e2d::ETransitionMove::ETransitionMove(float moveDuration, MOVE_DIRECT direct) | ||||||
| 	: m_fMoveDuration(moveDuration) | 	: m_fMoveDuration(moveDuration) | ||||||
|  |  | ||||||
|  | @ -1,6 +1,6 @@ | ||||||
| #include "..\etransitions.h" | #include "..\etransitions.h" | ||||||
| #include "..\eactions.h" | #include "..\eactions.h" | ||||||
| #include "..\etools.h" | #include "..\emanagers.h" | ||||||
| 
 | 
 | ||||||
| e2d::ETransitionScale::ETransitionScale(float scaleOutDuration, float scaleInDuration) | e2d::ETransitionScale::ETransitionScale(float scaleOutDuration, float scaleInDuration) | ||||||
| 	: m_fScaleOutDuration(scaleOutDuration) | 	: m_fScaleOutDuration(scaleOutDuration) | ||||||
|  |  | ||||||
|  | @ -1,6 +1,6 @@ | ||||||
| #include "..\etransitions.h" | #include "..\etransitions.h" | ||||||
| #include "..\eactions.h" | #include "..\eactions.h" | ||||||
| #include "..\etools.h" | #include "..\emanagers.h" | ||||||
| 
 | 
 | ||||||
| e2d::ETransitionScaleEmerge::ETransitionScaleEmerge(float duration, SCALE_EMERGE_MODE mode) | e2d::ETransitionScaleEmerge::ETransitionScaleEmerge(float duration, SCALE_EMERGE_MODE mode) | ||||||
| 	: m_fDuration(duration) | 	: m_fDuration(duration) | ||||||
|  |  | ||||||
|  | @ -19,11 +19,13 @@ | ||||||
| #include "emacros.h" | #include "emacros.h" | ||||||
| #include "ecommon.h" | #include "ecommon.h" | ||||||
| #include "ebase.h" | #include "ebase.h" | ||||||
|  | #include "emanagers.h" | ||||||
| #include "enodes.h" | #include "enodes.h" | ||||||
| #include "emsg.h" | #include "elisteners.h" | ||||||
| #include "etools.h" | #include "etools.h" | ||||||
| #include "eactions.h" | #include "eactions.h" | ||||||
| #include "etransitions.h" | #include "etransitions.h" | ||||||
|  | #include "egeometry.h" | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| #if defined(DEBUG) || defined(_DEBUG) | #if defined(DEBUG) || defined(_DEBUG) | ||||||
|  |  | ||||||
|  | @ -13,6 +13,7 @@ class ENode; | ||||||
| class EObjectManager; | class EObjectManager; | ||||||
| class EMouseListener; | class EMouseListener; | ||||||
| class EKeyboardListener; | class EKeyboardListener; | ||||||
|  | class EAction; | ||||||
| class ETransition; | class ETransition; | ||||||
| 
 | 
 | ||||||
| class EApp | class EApp | ||||||
|  | @ -143,7 +144,7 @@ public: | ||||||
| 
 | 
 | ||||||
| 	// 修改窗口背景色
 | 	// 修改窗口背景色
 | ||||||
| 	static void setBkColor( | 	static void setBkColor( | ||||||
| 		EColor color | 		UINT32 color | ||||||
| 	); | 	); | ||||||
| 
 | 
 | ||||||
| 	// 设置程序是否响应输入法
 | 	// 设置程序是否响应输入法
 | ||||||
|  | @ -200,7 +201,7 @@ protected: | ||||||
| 	bool	m_bTopMost; | 	bool	m_bTopMost; | ||||||
| 	EString	m_sTitle; | 	EString	m_sTitle; | ||||||
| 	EString	m_sAppName; | 	EString	m_sAppName; | ||||||
| 	EColor	m_ClearColor; | 	UINT32	m_ClearColor; | ||||||
| 	LONGLONG nAnimationInterval; | 	LONGLONG nAnimationInterval; | ||||||
| 	EScene * m_pCurrentScene; | 	EScene * m_pCurrentScene; | ||||||
| 	EScene * m_pNextScene; | 	EScene * m_pNextScene; | ||||||
|  | @ -292,6 +293,11 @@ public: | ||||||
| 	// 清空所有子成员
 | 	// 清空所有子成员
 | ||||||
| 	void clearAllChildren(); | 	void clearAllChildren(); | ||||||
| 
 | 
 | ||||||
|  | 	// 执行动画
 | ||||||
|  | 	void runAction( | ||||||
|  | 		EAction * action | ||||||
|  | 	); | ||||||
|  | 
 | ||||||
| 	// 绑定鼠标消息监听器
 | 	// 绑定鼠标消息监听器
 | ||||||
| 	void bindListener(EMouseListener * listener); | 	void bindListener(EMouseListener * listener); | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
							
								
								
									
										235
									
								
								Easy2D/ecommon.h
								
								
								
								
							
							
						
						
									
										235
									
								
								Easy2D/ecommon.h
								
								
								
								
							|  | @ -7,52 +7,51 @@ | ||||||
| namespace e2d | namespace e2d | ||||||
| { | { | ||||||
| 
 | 
 | ||||||
| typedef std::wstring EString; |  | ||||||
| 
 |  | ||||||
| template<typename T> |  | ||||||
| using EVector = std::vector<T>; |  | ||||||
| 
 |  | ||||||
| struct EWindowStyle | struct EWindowStyle | ||||||
| { | { | ||||||
|  | 	LPCTSTR m_pIconID;	/* 程序图标 ID */ | ||||||
|  | 	bool m_bNoClose;	/* 禁用关闭按钮 */ | ||||||
|  | 	bool m_bNoMiniSize;	/* 禁用最小化按钮 */ | ||||||
|  | 	bool m_bTopMost;	/* 窗口置顶 */ | ||||||
|  | 
 | ||||||
| 	EWindowStyle() | 	EWindowStyle() | ||||||
| 	{ | 	{ | ||||||
| 		ICON_ID = 0; | 		m_pIconID = 0; | ||||||
| 		NO_CLOSE = false; | 		m_bNoClose = false; | ||||||
| 		NO_MINI_SIZE = false; | 		m_bNoMiniSize = false; | ||||||
| 		TOP_MOST = false; | 		m_bTopMost = false; | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	EWindowStyle( | 	EWindowStyle( | ||||||
| 		LPCTSTR ICON_ID | 		LPCTSTR pIconID | ||||||
| 	) | 	) | ||||||
| 	{ | 	{ | ||||||
| 		this->ICON_ID = ICON_ID; | 		m_pIconID = pIconID; | ||||||
| 		NO_CLOSE = false; | 		m_bNoClose = false; | ||||||
| 		NO_MINI_SIZE = false; | 		m_bNoMiniSize = false; | ||||||
| 		TOP_MOST = false; | 		m_bTopMost = false; | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	EWindowStyle( | 	EWindowStyle( | ||||||
| 		LPCTSTR ICON_ID, | 		LPCTSTR pIconID, | ||||||
| 		bool NO_CLOSE, | 		bool bNoClose, | ||||||
| 		bool NO_MINI_SIZE, | 		bool bNoMiniSize, | ||||||
| 		bool TOP_MOST | 		bool bTopMost | ||||||
| 	) | 	) | ||||||
| 	{ | 	{ | ||||||
| 		this->ICON_ID = ICON_ID; | 		m_pIconID = pIconID; | ||||||
| 		this->NO_CLOSE = NO_CLOSE; | 		m_bNoClose = bNoClose; | ||||||
| 		this->NO_MINI_SIZE = NO_MINI_SIZE; | 		m_bNoMiniSize = bNoMiniSize; | ||||||
| 		this->TOP_MOST = TOP_MOST; | 		m_bTopMost = bTopMost; | ||||||
| 	} | 	} | ||||||
| 
 |  | ||||||
| 	LPCTSTR ICON_ID;	/* 程序图标 ID */ |  | ||||||
| 	bool NO_CLOSE;		/* 禁用关闭按钮 */ |  | ||||||
| 	bool NO_MINI_SIZE;	/* 禁用最小化按钮 */ |  | ||||||
| 	bool TOP_MOST;		/* 窗口置顶 */ |  | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
|  | 
 | ||||||
| struct EPoint | struct EPoint | ||||||
| { | { | ||||||
|  | 	float x; | ||||||
|  | 	float y; | ||||||
|  | 
 | ||||||
| 	EPoint() | 	EPoint() | ||||||
| 	{ | 	{ | ||||||
| 		x = 0; | 		x = 0; | ||||||
|  | @ -74,15 +73,15 @@ struct EPoint | ||||||
| 	{ | 	{ | ||||||
| 		return EPoint(x - p.x, y - p.y); | 		return EPoint(x - p.x, y - p.y); | ||||||
| 	} | 	} | ||||||
| 
 |  | ||||||
| 	float x; |  | ||||||
| 	float y; |  | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| typedef EPoint EVec; | typedef EPoint EVec; | ||||||
| 
 | 
 | ||||||
| struct ESize | struct ESize | ||||||
| { | { | ||||||
|  | 	float width; | ||||||
|  | 	float height; | ||||||
|  | 
 | ||||||
| 	ESize() | 	ESize() | ||||||
| 	{ | 	{ | ||||||
| 		width = 0; | 		width = 0; | ||||||
|  | @ -104,46 +103,43 @@ struct ESize | ||||||
| 	{ | 	{ | ||||||
| 		return ESize(width - size.width, height - size.height); | 		return ESize(width - size.width, height - size.height); | ||||||
| 	} | 	} | ||||||
| 
 |  | ||||||
| 	float width; |  | ||||||
| 	float height; |  | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
|  | typedef std::wstring EString; | ||||||
|  | 
 | ||||||
|  | template<typename T> | ||||||
|  | using EVector = std::vector<T>; | ||||||
|  | 
 | ||||||
| 
 | 
 | ||||||
| // 定时器回调函数(参数为该定时器被调用的次数,从 0 开始)
 | // 定时器回调函数(参数为该定时器被调用的次数,从 0 开始)
 | ||||||
| typedef std::function<void(int)> TIMER_CALLBACK; | typedef std::function<void(int)> TIMER_CALLBACK; | ||||||
|  | 
 | ||||||
| // 按钮点击回调函数
 | // 按钮点击回调函数
 | ||||||
| typedef std::function<void()> BUTTON_CLICK_CALLBACK; | typedef std::function<void()> BUTTON_CLICK_CALLBACK; | ||||||
|  | 
 | ||||||
| // 按键消息监听回调函数
 | // 按键消息监听回调函数
 | ||||||
| typedef std::function<void()> KEY_LISTENER_CALLBACK; | typedef std::function<void()> KEY_LISTENER_CALLBACK; | ||||||
|  | 
 | ||||||
| // 鼠标消息监听回调函数
 | // 鼠标消息监听回调函数
 | ||||||
| typedef std::function<void()> MOUSE_LISTENER_CALLBACK; | typedef std::function<void()> MOUSE_LISTENER_CALLBACK; | ||||||
|  | 
 | ||||||
| // 鼠标点击消息监听回调函数(参数为点击位置)
 | // 鼠标点击消息监听回调函数(参数为点击位置)
 | ||||||
| typedef std::function<void(EPoint mousePos)> MOUSE_CLICK_LISTENER_CALLBACK; | typedef std::function<void(EPoint mousePos)> MOUSE_CLICK_LISTENER_CALLBACK; | ||||||
|  | 
 | ||||||
| // 鼠标按下消息监听回调函数(参数为按下位置)
 | // 鼠标按下消息监听回调函数(参数为按下位置)
 | ||||||
| typedef MOUSE_CLICK_LISTENER_CALLBACK MOUSE_PRESS_LISTENER_CALLBACK; | typedef MOUSE_CLICK_LISTENER_CALLBACK MOUSE_PRESS_LISTENER_CALLBACK; | ||||||
|  | 
 | ||||||
| // 鼠标双击消息监听回调函数(参数为双击位置)
 | // 鼠标双击消息监听回调函数(参数为双击位置)
 | ||||||
| typedef MOUSE_CLICK_LISTENER_CALLBACK MOUSE_DBLCLK_LISTENER_CALLBACK; | typedef MOUSE_CLICK_LISTENER_CALLBACK MOUSE_DBLCLK_LISTENER_CALLBACK; | ||||||
|  | 
 | ||||||
| // 鼠标拖动消息监听函数(参数为拖动前位置和拖动后位置)
 | // 鼠标拖动消息监听函数(参数为拖动前位置和拖动后位置)
 | ||||||
| typedef std::function<void(EPoint begin, EPoint end)> MOUSE_DRAG_LISTENER_CALLBACK; | typedef std::function<void(EPoint begin, EPoint end)> MOUSE_DRAG_LISTENER_CALLBACK; | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| 
 |  | ||||||
| class EColor | class EColor | ||||||
| { | { | ||||||
| public: | public: | ||||||
| 
 | 	enum COMMON_VALUE | ||||||
| 	EColor() |  | ||||||
| 	{ |  | ||||||
| 		value = VALUE::WHITE; |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	EColor(int color) |  | ||||||
| 	{ |  | ||||||
| 		value = VALUE(color); |  | ||||||
| 	} |  | ||||||
| 	 |  | ||||||
| 	enum VALUE |  | ||||||
| 	{ | 	{ | ||||||
| 		ALICE_BLUE = 0xF0F8FF, | 		ALICE_BLUE = 0xF0F8FF, | ||||||
| 		ANTIQUE_WHITE = 0xFAEBD7, | 		ANTIQUE_WHITE = 0xFAEBD7, | ||||||
|  | @ -286,26 +282,13 @@ public: | ||||||
| 		YELLOW = 0xFFFF00, | 		YELLOW = 0xFFFF00, | ||||||
| 		YELLOW_GREEN = 0x9ACD32 | 		YELLOW_GREEN = 0x9ACD32 | ||||||
| 	}; | 	}; | ||||||
| 
 |  | ||||||
| 	VALUE value; |  | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| class EFontWeight | class EFontWeight | ||||||
| { | { | ||||||
| public: | public: | ||||||
| 
 | 	enum COMMON_VALUE | ||||||
| 	EFontWeight() |  | ||||||
| 	{ |  | ||||||
| 		value = VALUE::REGULAR; |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	EFontWeight(int fontWeight) |  | ||||||
| 	{ |  | ||||||
| 		value = VALUE(fontWeight); |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	enum VALUE |  | ||||||
| 	{ | 	{ | ||||||
| 		THIN = 100, | 		THIN = 100, | ||||||
| 		EXTRA_LIGHT = 200, | 		EXTRA_LIGHT = 200, | ||||||
|  | @ -325,8 +308,138 @@ public: | ||||||
| 		EXTRA_BLACK = 950, | 		EXTRA_BLACK = 950, | ||||||
| 		ULTRA_BLACK = 950 | 		ULTRA_BLACK = 950 | ||||||
| 	}; | 	}; | ||||||
|  | }; | ||||||
| 
 | 
 | ||||||
| 	VALUE value; | 
 | ||||||
|  | // 鼠标消息
 | ||||||
|  | class EMouseMsg | ||||||
|  | { | ||||||
|  | public: | ||||||
|  | 	// 鼠标消息集合
 | ||||||
|  | 	enum MOUSE_MSG | ||||||
|  | 	{ | ||||||
|  | 		MOVE = 0x0200,	// 鼠标移动
 | ||||||
|  | 		LBUTTON_DOWN,	// 鼠标左键按下
 | ||||||
|  | 		LBUTTON_UP,		// 鼠标左键抬起
 | ||||||
|  | 		LBUTTON_DBLCLK,	// 鼠标左键双击
 | ||||||
|  | 		RBUTTON_DOWN,	// 鼠标右键按下
 | ||||||
|  | 		RBUTTON_UP,		// 鼠标右键抬起
 | ||||||
|  | 		RBUTTON_DBLCLK,	// 鼠标右键双击
 | ||||||
|  | 		MBUTTON_DOWN,	// 鼠标中键按下
 | ||||||
|  | 		MBUTTON_UP,		// 鼠标中键抬起
 | ||||||
|  | 		MBUTTON_DBLCLK,	// 鼠标中键双击
 | ||||||
|  | 		WHEEL			// 滑动滚轮
 | ||||||
|  | 	}; | ||||||
|  | 
 | ||||||
|  | 	// 获取鼠标横坐标
 | ||||||
|  | 	static DWORD getPosX(); | ||||||
|  | 
 | ||||||
|  | 	// 获取鼠标纵坐标
 | ||||||
|  | 	static DWORD getPosY(); | ||||||
|  | 
 | ||||||
|  | 	// 获取鼠标坐标
 | ||||||
|  | 	static EPoint getPos(); | ||||||
|  | 
 | ||||||
|  | 	// 获取鼠标左键按下状态
 | ||||||
|  | 	static bool isLButtonDown(); | ||||||
|  | 
 | ||||||
|  | 	// 获取鼠标中键按下状态
 | ||||||
|  | 	static bool isMButtonDown(); | ||||||
|  | 
 | ||||||
|  | 	// 获取鼠标右键按下状态
 | ||||||
|  | 	static bool isRButtonDown(); | ||||||
|  | 
 | ||||||
|  | 	// 获取 Shift 按键状态
 | ||||||
|  | 	static bool isShiftDown(); | ||||||
|  | 
 | ||||||
|  | 	// 获取 Ctrl 按键状态
 | ||||||
|  | 	static bool isCtrlDown(); | ||||||
|  | 
 | ||||||
|  | 	// 获取鼠标滚轮值
 | ||||||
|  | 	static DWORD getWheelDelta(); | ||||||
|  | 
 | ||||||
|  | 	// 获取当前鼠标消息类型
 | ||||||
|  | 	static MOUSE_MSG getMsg(); | ||||||
|  | 
 | ||||||
|  | 	// 获取当前鼠标消息
 | ||||||
|  | 	static EMouseMsg & getMouseMsg(); | ||||||
|  | 
 | ||||||
|  | public: | ||||||
|  | 	UINT m_nMsg = 0; | ||||||
|  | 	WPARAM m_wParam = 0; | ||||||
|  | 	LPARAM m_lParam = 0; | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | // 按键消息
 | ||||||
|  | class EKeyboardMsg | ||||||
|  | { | ||||||
|  | public: | ||||||
|  | 	// 按键消息类型集合
 | ||||||
|  | 	enum KEYBOARD_MSG | ||||||
|  | 	{ | ||||||
|  | 		KEY_DOWN = 0x0100,	// 按下
 | ||||||
|  | 		KEY_UP				// 抬起
 | ||||||
|  | 	}; | ||||||
|  | 
 | ||||||
|  | 	// 按键键值集合
 | ||||||
|  | 	enum class KEY | ||||||
|  | 	{ | ||||||
|  | 		A = 'A', B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V, W, X, Y, Z,					// 字母键值
 | ||||||
|  | 		NUM0 = '0', NUM1, NUM2, NUM3, NUM4, NUM5, NUM6, NUM7, NUM8, NUM9,									// 数字键值
 | ||||||
|  | 		NUMPAD0 = 0x60, NUMPAD1, NUMPAD2, NUMPAD3, NUMPAD4, NUMPAD5, NUMPAD6, NUMPAD7, NUMPAD8, NUMPAD9,	// 数字小键盘键值
 | ||||||
|  | 		F1 = 0x70, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12,											// F键键值
 | ||||||
|  | 		MULTIPLY,		// 乘号键键值
 | ||||||
|  | 		ADD,			// 加号键键值
 | ||||||
|  | 		SEPARATOR,		// 分割键键值
 | ||||||
|  | 		SUBTRACT,		// 减号键键值
 | ||||||
|  | 		DECIMAL,		// 小数点键键值
 | ||||||
|  | 		DIVIDE,			// 除号键键值
 | ||||||
|  | 		TAB = 0x09,		// TAB 键键值
 | ||||||
|  | 		ENTER = 0x0D,	// 回车键键值
 | ||||||
|  | 		SHIFT, CTRL, 	// SHIFT 键键值
 | ||||||
|  | 		ESC = 0x1B, 	// ESCAPE 键键值
 | ||||||
|  | 		SPACE = 0x20, 	// 空格键键值
 | ||||||
|  | 		PAGE_UP, 		// PageUp 键键值
 | ||||||
|  | 		PAGE_DOWN, 		// PageDown 键键值
 | ||||||
|  | 		END, 			// End 键键值
 | ||||||
|  | 		HOME, 			// Home 键键值
 | ||||||
|  | 		LEFT, 			// 左键键值
 | ||||||
|  | 		UP, 			// 上键键值
 | ||||||
|  | 		RIGHT, 			// 右键键值
 | ||||||
|  | 		DOWN			// 下键键值
 | ||||||
|  | 	}; | ||||||
|  | 
 | ||||||
|  | 	// 获取按键消息类型
 | ||||||
|  | 	static KEYBOARD_MSG getMsg(); | ||||||
|  | 
 | ||||||
|  | 	// 获取键值
 | ||||||
|  | 	static KEY getVal(); | ||||||
|  | 
 | ||||||
|  | 	// 获取按键消息的计数
 | ||||||
|  | 	static DWORD getCount(); | ||||||
|  | 
 | ||||||
|  | 	// 获取特定按键的状态
 | ||||||
|  | 	static bool isKeyDown( | ||||||
|  | 		KEY key | ||||||
|  | 	); | ||||||
|  | 
 | ||||||
|  | 	// 获取大小写锁定状态
 | ||||||
|  | 	static bool isCapitalLockOn(); | ||||||
|  | 
 | ||||||
|  | 	// 获取数字小键盘锁定状态
 | ||||||
|  | 	static bool isNumpadLockOn(); | ||||||
|  | 
 | ||||||
|  | 	// 获取滑动锁定状态
 | ||||||
|  | 	static bool isScrollLockOn(); | ||||||
|  | 
 | ||||||
|  | 	// 获取当前按键消息
 | ||||||
|  | 	static EKeyboardMsg & getKeyboardMsg(); | ||||||
|  | 
 | ||||||
|  | public: | ||||||
|  | 	UINT m_nMsg = 0; | ||||||
|  | 	WPARAM m_wParam = 0; | ||||||
|  | 	LPARAM m_lParam = 0; | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| } | } | ||||||
|  | @ -0,0 +1,114 @@ | ||||||
|  | #pragma once | ||||||
|  | #include "ebase.h" | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | namespace e2d | ||||||
|  | { | ||||||
|  | 
 | ||||||
|  | class EPhysicsManager; | ||||||
|  | 
 | ||||||
|  | class EGeometry : | ||||||
|  | 	public EObject | ||||||
|  | { | ||||||
|  | 	friend EPhysicsManager; | ||||||
|  | public: | ||||||
|  | 	EGeometry(); | ||||||
|  | 
 | ||||||
|  | protected: | ||||||
|  | 	virtual bool _isCollisionWith( | ||||||
|  | 		EGeometry * pGeometry | ||||||
|  | 	); | ||||||
|  | 
 | ||||||
|  | 	virtual ID2D1Geometry * _getD2dGeometry() const = 0; | ||||||
|  | 
 | ||||||
|  | protected: | ||||||
|  | 	bool	m_bTransformed; | ||||||
|  | 	ENode * m_pParentNode; | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | class ERectangle : | ||||||
|  | 	public EGeometry | ||||||
|  | { | ||||||
|  | public: | ||||||
|  | 	// 创建一个空矩形
 | ||||||
|  | 	ERectangle(); | ||||||
|  | 
 | ||||||
|  | 	// 根据左上角坐标和宽高创建矩形
 | ||||||
|  | 	ERectangle( | ||||||
|  | 		float x, | ||||||
|  | 		float y, | ||||||
|  | 		float width, | ||||||
|  | 		float height | ||||||
|  | 	); | ||||||
|  | 
 | ||||||
|  | 	// 创建一个和节点位置大小相同的矩形
 | ||||||
|  | 	ERectangle( | ||||||
|  | 		ENode * node | ||||||
|  | 	); | ||||||
|  | 
 | ||||||
|  | protected: | ||||||
|  | 	void _setRect( | ||||||
|  | 		float left, | ||||||
|  | 		float top, | ||||||
|  | 		float right, | ||||||
|  | 		float bottom | ||||||
|  | 	); | ||||||
|  | 
 | ||||||
|  | 	virtual ID2D1RectangleGeometry * _getD2dGeometry() const override; | ||||||
|  | 
 | ||||||
|  | protected: | ||||||
|  | 	ID2D1RectangleGeometry * m_pD2dRectangle; | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | class ECircle : | ||||||
|  | 	public EGeometry | ||||||
|  | { | ||||||
|  | public: | ||||||
|  | 	ECircle(); | ||||||
|  | 
 | ||||||
|  | 	ECircle( | ||||||
|  | 		EPoint center, | ||||||
|  | 		float radius | ||||||
|  | 	); | ||||||
|  | 
 | ||||||
|  | protected: | ||||||
|  | 	void _setCircle( | ||||||
|  | 		EPoint center, | ||||||
|  | 		float radius | ||||||
|  | 	); | ||||||
|  | 
 | ||||||
|  | 	virtual ID2D1EllipseGeometry * _getD2dGeometry() const override; | ||||||
|  | 
 | ||||||
|  | protected: | ||||||
|  | 	ID2D1EllipseGeometry * m_pD2dCircle; | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | class EEllipse : | ||||||
|  | 	public EGeometry | ||||||
|  | { | ||||||
|  | public: | ||||||
|  | 	EEllipse(); | ||||||
|  | 
 | ||||||
|  | 	EEllipse( | ||||||
|  | 		EPoint center, | ||||||
|  | 		float radiusX, | ||||||
|  | 		float radiusY | ||||||
|  | 	); | ||||||
|  | 
 | ||||||
|  | protected: | ||||||
|  | 	void _setEllipse( | ||||||
|  | 		EPoint center, | ||||||
|  | 		float radiusX, | ||||||
|  | 		float radiusY | ||||||
|  | 	); | ||||||
|  | 
 | ||||||
|  | 	virtual ID2D1EllipseGeometry * _getD2dGeometry() const override; | ||||||
|  | 
 | ||||||
|  | protected: | ||||||
|  | 	ID2D1EllipseGeometry * m_pD2dEllipse; | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | } | ||||||
|  | @ -0,0 +1,324 @@ | ||||||
|  | #pragma once | ||||||
|  | #include "ebase.h" | ||||||
|  | 
 | ||||||
|  | namespace e2d | ||||||
|  | { | ||||||
|  | 
 | ||||||
|  | class ENode; | ||||||
|  | class EMsgManager; | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | // 监听器
 | ||||||
|  | class EListener : | ||||||
|  | 	public EObject | ||||||
|  | { | ||||||
|  | 	friend EMsgManager; | ||||||
|  | 
 | ||||||
|  | public: | ||||||
|  | 	EListener(); | ||||||
|  | 
 | ||||||
|  | 	EListener( | ||||||
|  | 		const EString &name | ||||||
|  | 	); | ||||||
|  | 
 | ||||||
|  | 	// 获取监听器状态
 | ||||||
|  | 	bool isRunning() const; | ||||||
|  | 
 | ||||||
|  | 	// 启动监听
 | ||||||
|  | 	void start(); | ||||||
|  | 
 | ||||||
|  | 	// 停止监听
 | ||||||
|  | 	void stop(); | ||||||
|  | 
 | ||||||
|  | 	// 获取监听器名称
 | ||||||
|  | 	EString getName() const; | ||||||
|  | 
 | ||||||
|  | 	// 获取监听器所在节点
 | ||||||
|  | 	ENode * getParentNode() const; | ||||||
|  | 
 | ||||||
|  | 	// 设置监听器名称
 | ||||||
|  | 	void setName( | ||||||
|  | 		const EString &name | ||||||
|  | 	); | ||||||
|  | 
 | ||||||
|  | 	// 绑定监听器到场景
 | ||||||
|  | 	virtual void bindWith( | ||||||
|  | 		EScene * pParentScene | ||||||
|  | 	) = 0; | ||||||
|  | 
 | ||||||
|  | 	// 绑定监听器到节点
 | ||||||
|  | 	virtual void bindWith( | ||||||
|  | 		ENode * pParentNode | ||||||
|  | 	) = 0; | ||||||
|  | 
 | ||||||
|  | protected: | ||||||
|  | 	// 执行监听器回调函数
 | ||||||
|  | 	virtual void _callOn() = 0; | ||||||
|  | 
 | ||||||
|  | protected: | ||||||
|  | 	EString		m_sName; | ||||||
|  | 	bool		m_bRunning; | ||||||
|  | 	bool		m_bAlways; | ||||||
|  | 	ENode *		m_pParentNode; | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | // 鼠标消息监听器
 | ||||||
|  | class EMouseListener : | ||||||
|  | 	public EListener | ||||||
|  | { | ||||||
|  | 	friend EMsgManager; | ||||||
|  | 
 | ||||||
|  | public: | ||||||
|  | 	EMouseListener(); | ||||||
|  | 
 | ||||||
|  | 	EMouseListener( | ||||||
|  | 		const EString &name | ||||||
|  | 	); | ||||||
|  | 
 | ||||||
|  | 	EMouseListener( | ||||||
|  | 		const MOUSE_LISTENER_CALLBACK &callback | ||||||
|  | 	); | ||||||
|  | 
 | ||||||
|  | 	EMouseListener( | ||||||
|  | 		const EString &name, | ||||||
|  | 		const MOUSE_LISTENER_CALLBACK &callback | ||||||
|  | 	); | ||||||
|  | 
 | ||||||
|  | 	// 设置监听器回调函数
 | ||||||
|  | 	void setCallback( | ||||||
|  | 		const MOUSE_LISTENER_CALLBACK &callback | ||||||
|  | 	); | ||||||
|  | 
 | ||||||
|  | 	// 绑定监听器到场景
 | ||||||
|  | 	virtual void bindWith( | ||||||
|  | 		EScene * pParentScene | ||||||
|  | 	) override; | ||||||
|  | 
 | ||||||
|  | 	// 绑定监听器到节点
 | ||||||
|  | 	virtual void bindWith( | ||||||
|  | 		ENode * pParentNode | ||||||
|  | 	) override; | ||||||
|  | 
 | ||||||
|  | protected: | ||||||
|  | 	// 执行监听器回调函数
 | ||||||
|  | 	virtual void _callOn() override; | ||||||
|  | 
 | ||||||
|  | protected: | ||||||
|  | 	MOUSE_LISTENER_CALLBACK m_Callback; | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | // 鼠标按下消息监听器
 | ||||||
|  | class EMousePressListener : | ||||||
|  | 	public EMouseListener | ||||||
|  | { | ||||||
|  | public: | ||||||
|  | 	EMousePressListener(); | ||||||
|  | 
 | ||||||
|  | 	EMousePressListener( | ||||||
|  | 		const EString &name | ||||||
|  | 	); | ||||||
|  | 
 | ||||||
|  | 	EMousePressListener( | ||||||
|  | 		const MOUSE_PRESS_LISTENER_CALLBACK &callback | ||||||
|  | 	); | ||||||
|  | 
 | ||||||
|  | 	EMousePressListener( | ||||||
|  | 		const EString &name, | ||||||
|  | 		const MOUSE_PRESS_LISTENER_CALLBACK &callback | ||||||
|  | 	); | ||||||
|  | 
 | ||||||
|  | 	// 设置监听器回调函数
 | ||||||
|  | 	void setCallback( | ||||||
|  | 		const MOUSE_PRESS_LISTENER_CALLBACK &callback | ||||||
|  | 	); | ||||||
|  | 
 | ||||||
|  | protected: | ||||||
|  | 	// 执行监听器回调函数
 | ||||||
|  | 	virtual void _callOn() override; | ||||||
|  | 
 | ||||||
|  | protected: | ||||||
|  | 	MOUSE_PRESS_LISTENER_CALLBACK m_Callback; | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | // 鼠标点击消息监听器
 | ||||||
|  | class EMouseClickListener : | ||||||
|  | 	public EMouseListener | ||||||
|  | { | ||||||
|  | public: | ||||||
|  | 	EMouseClickListener(); | ||||||
|  | 
 | ||||||
|  | 	EMouseClickListener( | ||||||
|  | 		const EString &name | ||||||
|  | 	); | ||||||
|  | 
 | ||||||
|  | 	EMouseClickListener( | ||||||
|  | 		const MOUSE_CLICK_LISTENER_CALLBACK &callback | ||||||
|  | 	); | ||||||
|  | 
 | ||||||
|  | 	EMouseClickListener( | ||||||
|  | 		const EString &name, | ||||||
|  | 		const MOUSE_CLICK_LISTENER_CALLBACK &callback | ||||||
|  | 	); | ||||||
|  | 
 | ||||||
|  | 	// 设置监听器回调函数
 | ||||||
|  | 	void setCallback( | ||||||
|  | 		const MOUSE_CLICK_LISTENER_CALLBACK &callback | ||||||
|  | 	); | ||||||
|  | 
 | ||||||
|  | protected: | ||||||
|  | 	// 执行监听器回调函数
 | ||||||
|  | 	virtual void _callOn() override; | ||||||
|  | 
 | ||||||
|  | protected: | ||||||
|  | 	bool m_bPressed; | ||||||
|  | 	MOUSE_CLICK_LISTENER_CALLBACK m_Callback; | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | // 鼠标点击消息监听器
 | ||||||
|  | class EMouseDoubleClickListener : | ||||||
|  | 	public EMouseListener | ||||||
|  | { | ||||||
|  | public: | ||||||
|  | 	EMouseDoubleClickListener(); | ||||||
|  | 
 | ||||||
|  | 	EMouseDoubleClickListener( | ||||||
|  | 		const EString &name | ||||||
|  | 	); | ||||||
|  | 
 | ||||||
|  | 	EMouseDoubleClickListener( | ||||||
|  | 		const MOUSE_DBLCLK_LISTENER_CALLBACK &callback | ||||||
|  | 	); | ||||||
|  | 
 | ||||||
|  | 	EMouseDoubleClickListener( | ||||||
|  | 		const EString &name, | ||||||
|  | 		const MOUSE_DBLCLK_LISTENER_CALLBACK &callback | ||||||
|  | 	); | ||||||
|  | 
 | ||||||
|  | 	// 设置监听器回调函数
 | ||||||
|  | 	void setCallback( | ||||||
|  | 		const MOUSE_DBLCLK_LISTENER_CALLBACK &callback | ||||||
|  | 	); | ||||||
|  | 
 | ||||||
|  | protected: | ||||||
|  | 	// 执行监听器回调函数
 | ||||||
|  | 	virtual void _callOn() override; | ||||||
|  | 
 | ||||||
|  | protected: | ||||||
|  | 	bool m_bPressed; | ||||||
|  | 	MOUSE_DBLCLK_LISTENER_CALLBACK m_Callback; | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | // 鼠标拖动消息监听器
 | ||||||
|  | class EMouseDragListener : | ||||||
|  | 	public EMouseListener | ||||||
|  | { | ||||||
|  | public: | ||||||
|  | 	EMouseDragListener(); | ||||||
|  | 
 | ||||||
|  | 	EMouseDragListener( | ||||||
|  | 		const EString &name | ||||||
|  | 	); | ||||||
|  | 
 | ||||||
|  | 	EMouseDragListener( | ||||||
|  | 		const MOUSE_DRAG_LISTENER_CALLBACK &callback | ||||||
|  | 	); | ||||||
|  | 
 | ||||||
|  | 	EMouseDragListener( | ||||||
|  | 		const EString &name, | ||||||
|  | 		const MOUSE_DRAG_LISTENER_CALLBACK &callback | ||||||
|  | 	); | ||||||
|  | 
 | ||||||
|  | 	// 设置监听器回调函数
 | ||||||
|  | 	void setCallback( | ||||||
|  | 		const MOUSE_DRAG_LISTENER_CALLBACK &callback | ||||||
|  | 	); | ||||||
|  | 
 | ||||||
|  | protected: | ||||||
|  | 	// 执行监听器回调函数
 | ||||||
|  | 	virtual void _callOn() override; | ||||||
|  | 
 | ||||||
|  | protected: | ||||||
|  | 	EPoint	m_Begin; | ||||||
|  | 	MOUSE_DRAG_LISTENER_CALLBACK m_Callback; | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | // 按键消息监听器
 | ||||||
|  | class EKeyboardListener : | ||||||
|  | 	public EListener | ||||||
|  | { | ||||||
|  | 	friend EMsgManager; | ||||||
|  | 
 | ||||||
|  | public: | ||||||
|  | 	EKeyboardListener(); | ||||||
|  | 
 | ||||||
|  | 	EKeyboardListener( | ||||||
|  | 		const EString &name | ||||||
|  | 	); | ||||||
|  | 
 | ||||||
|  | 	EKeyboardListener( | ||||||
|  | 		const KEY_LISTENER_CALLBACK &callback | ||||||
|  | 	); | ||||||
|  | 
 | ||||||
|  | 	EKeyboardListener( | ||||||
|  | 		const EString &name, | ||||||
|  | 		const KEY_LISTENER_CALLBACK &callback | ||||||
|  | 	); | ||||||
|  | 
 | ||||||
|  | 	// 设置监听器回调函数
 | ||||||
|  | 	void setCallback( | ||||||
|  | 		const KEY_LISTENER_CALLBACK &callback | ||||||
|  | 	); | ||||||
|  | 
 | ||||||
|  | 	// 绑定监听器到场景
 | ||||||
|  | 	virtual void bindWith( | ||||||
|  | 		EScene * pParentScene | ||||||
|  | 	) override; | ||||||
|  | 
 | ||||||
|  | 	// 绑定监听器到节点
 | ||||||
|  | 	virtual void bindWith( | ||||||
|  | 		ENode * pParentNode | ||||||
|  | 	) override; | ||||||
|  | 
 | ||||||
|  | protected: | ||||||
|  | 	// 执行监听器回调函数
 | ||||||
|  | 	virtual void _callOn() override; | ||||||
|  | 
 | ||||||
|  | protected: | ||||||
|  | 	KEY_LISTENER_CALLBACK m_Callback; | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | // 按键按下消息监听
 | ||||||
|  | class EKeyboardPressListener : | ||||||
|  | 	public EKeyboardListener | ||||||
|  | { | ||||||
|  | 	friend EMsgManager; | ||||||
|  | 
 | ||||||
|  | public: | ||||||
|  | 	EKeyboardPressListener(); | ||||||
|  | 
 | ||||||
|  | 	EKeyboardPressListener( | ||||||
|  | 		const EString &name | ||||||
|  | 	); | ||||||
|  | 
 | ||||||
|  | 	EKeyboardPressListener( | ||||||
|  | 		const KEY_LISTENER_CALLBACK &callback | ||||||
|  | 	); | ||||||
|  | 
 | ||||||
|  | 	EKeyboardPressListener( | ||||||
|  | 		const EString &name, | ||||||
|  | 		const KEY_LISTENER_CALLBACK &callback | ||||||
|  | 	); | ||||||
|  | 
 | ||||||
|  | protected: | ||||||
|  | 	// 执行监听器回调函数
 | ||||||
|  | 	virtual void _callOn() override; | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | } | ||||||
|  | @ -0,0 +1,331 @@ | ||||||
|  | #pragma once | ||||||
|  | #include "emacros.h" | ||||||
|  | #include "ecommon.h" | ||||||
|  | 
 | ||||||
|  | namespace e2d | ||||||
|  | { | ||||||
|  | 
 | ||||||
|  | class EApp; | ||||||
|  | class EObject; | ||||||
|  | class EScene; | ||||||
|  | class ENode; | ||||||
|  | class ETimer; | ||||||
|  | class EAction; | ||||||
|  | class EMouseListener; | ||||||
|  | class EKeyboardListener; | ||||||
|  | 
 | ||||||
|  | // 对象管理器
 | ||||||
|  | class EObjectManager | ||||||
|  | { | ||||||
|  | 	friend EApp; | ||||||
|  | 
 | ||||||
|  | public: | ||||||
|  | 	// 将一个节点放入内存池
 | ||||||
|  | 	static void add( | ||||||
|  | 		e2d::EObject * nptr | ||||||
|  | 	); | ||||||
|  | 
 | ||||||
|  | 	// 通知内存池刷新
 | ||||||
|  | 	static void notifyFlush(); | ||||||
|  | 
 | ||||||
|  | private: | ||||||
|  | 	// 刷新内存池
 | ||||||
|  | 	static void __flush(); | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | // 消息管理器
 | ||||||
|  | class EMsgManager | ||||||
|  | { | ||||||
|  | 	friend EApp; | ||||||
|  | 	friend EScene; | ||||||
|  | 	friend ENode; | ||||||
|  | 
 | ||||||
|  | public: | ||||||
|  | 	// 绑定鼠标消息监听器到场景
 | ||||||
|  | 	static void bindListener( | ||||||
|  | 		EMouseListener * listener, | ||||||
|  | 		EScene * pParentScene, | ||||||
|  | 		bool always = false /* 是否在游戏暂停时仍然监听 */ | ||||||
|  | 	); | ||||||
|  | 
 | ||||||
|  | 	// 绑定鼠标消息监听器到节点
 | ||||||
|  | 	static void bindListener( | ||||||
|  | 		EMouseListener * listener, | ||||||
|  | 		ENode * pParentNode, | ||||||
|  | 		bool always = false /* 是否在游戏暂停时仍然监听 */ | ||||||
|  | 	); | ||||||
|  | 
 | ||||||
|  | 	// 启动具有相同名称的鼠标消息监听器
 | ||||||
|  | 	static void startMouseListeners( | ||||||
|  | 		const EString &name | ||||||
|  | 	); | ||||||
|  | 
 | ||||||
|  | 	// 停止具有相同名称的鼠标消息监听器
 | ||||||
|  | 	static void stopMouseListeners( | ||||||
|  | 		const EString &name | ||||||
|  | 	); | ||||||
|  | 
 | ||||||
|  | 	// 删除具有相同名称的鼠标消息监听器
 | ||||||
|  | 	static void delMouseListeners( | ||||||
|  | 		const EString &name | ||||||
|  | 	); | ||||||
|  | 
 | ||||||
|  | 	// 启动绑定在场景及其子节点上的所有鼠标消息监听器
 | ||||||
|  | 	static void startAllMouseListenersBindedWith( | ||||||
|  | 		EScene * pParentScene | ||||||
|  | 	); | ||||||
|  | 
 | ||||||
|  | 	// 停止绑定在场景及其子节点上的所有鼠标消息监听器
 | ||||||
|  | 	static void stopAllMouseListenersBindedWith( | ||||||
|  | 		EScene * pParentScene | ||||||
|  | 	); | ||||||
|  | 
 | ||||||
|  | 	// 启动绑定在节点上的所有鼠标消息监听器
 | ||||||
|  | 	static void startAllMouseListenersBindedWith( | ||||||
|  | 		ENode * pParentNode | ||||||
|  | 	); | ||||||
|  | 
 | ||||||
|  | 	// 停止绑定在节点上的所有鼠标消息监听器
 | ||||||
|  | 	static void stopAllMouseListenersBindedWith( | ||||||
|  | 		ENode * pParentNode | ||||||
|  | 	); | ||||||
|  | 
 | ||||||
|  | 	// 启动所有鼠标消息监听器
 | ||||||
|  | 	static void startAllMouseListeners(); | ||||||
|  | 
 | ||||||
|  | 	// 停止所有鼠标消息监听器
 | ||||||
|  | 	static void stopAllMouseListeners(); | ||||||
|  | 
 | ||||||
|  | 	// 绑定按键消息监听器到场景
 | ||||||
|  | 	static void bindListener( | ||||||
|  | 		EKeyboardListener * listener, | ||||||
|  | 		EScene * pParentScene, | ||||||
|  | 		bool always = false /* 是否在游戏暂停时仍然监听 */ | ||||||
|  | 	); | ||||||
|  | 
 | ||||||
|  | 	// 绑定按键消息监听器到节点
 | ||||||
|  | 	static void bindListener( | ||||||
|  | 		EKeyboardListener * listener, | ||||||
|  | 		ENode * pParentNode, | ||||||
|  | 		bool always = false /* 是否在游戏暂停时仍然监听 */ | ||||||
|  | 	); | ||||||
|  | 
 | ||||||
|  | 	// 启动名称相同的按键消息监听器
 | ||||||
|  | 	static void startKeyboardListeners( | ||||||
|  | 		const EString &name | ||||||
|  | 	); | ||||||
|  | 
 | ||||||
|  | 	// 停止名称相同的按键消息监听器
 | ||||||
|  | 	static void stopKeyboardListeners( | ||||||
|  | 		const EString &name | ||||||
|  | 	); | ||||||
|  | 
 | ||||||
|  | 	// 删除名称相同的按键消息监听器
 | ||||||
|  | 	static void delKeyboardListeners( | ||||||
|  | 		const EString &name | ||||||
|  | 	); | ||||||
|  | 
 | ||||||
|  | 	// 启动绑定在场景及其子节点上的所有按键消息监听器
 | ||||||
|  | 	static void startAllKeyboardListenersBindedWith( | ||||||
|  | 		EScene * pParentScene | ||||||
|  | 	); | ||||||
|  | 
 | ||||||
|  | 	// 停止绑定在场景及其子节点上的所有按键消息监听器
 | ||||||
|  | 	static void stopAllKeyboardListenersBindedWith( | ||||||
|  | 		EScene * pParentScene | ||||||
|  | 	); | ||||||
|  | 
 | ||||||
|  | 	// 启动绑定在节点上的所有按键消息监听器
 | ||||||
|  | 	static void startAllKeyboardListenersBindedWith( | ||||||
|  | 		ENode * pParentNode | ||||||
|  | 	); | ||||||
|  | 
 | ||||||
|  | 	// 停止绑定在节点上的所有按键消息监听器
 | ||||||
|  | 	static void stopAllKeyboardListenersBindedWith( | ||||||
|  | 		ENode * pParentNode | ||||||
|  | 	); | ||||||
|  | 
 | ||||||
|  | 	// 启动所有按键消息监听器
 | ||||||
|  | 	static void startAllKeyboardListeners(); | ||||||
|  | 
 | ||||||
|  | 	// 停止所有按键消息监听器
 | ||||||
|  | 	static void stopAllKeyboardListeners(); | ||||||
|  | 
 | ||||||
|  | private: | ||||||
|  | 	// 清除所有监听器
 | ||||||
|  | 	static void _clearManager(); | ||||||
|  | 
 | ||||||
|  | 	// 清除绑定在节点上的所有鼠标消息监听器
 | ||||||
|  | 	static void _clearAllMouseListenersBindedWith( | ||||||
|  | 		ENode * pParentNode | ||||||
|  | 	); | ||||||
|  | 
 | ||||||
|  | 	// 清除绑定在节点上的所有按键消息监听器
 | ||||||
|  | 	static void _clearAllKeyboardListenersBindedWith( | ||||||
|  | 		ENode * pParentNode | ||||||
|  | 	); | ||||||
|  | 
 | ||||||
|  | 	// 鼠标消息程序
 | ||||||
|  | 	static void MouseProc( | ||||||
|  | 		UINT message, | ||||||
|  | 		WPARAM wParam, | ||||||
|  | 		LPARAM lParam | ||||||
|  | 	); | ||||||
|  | 
 | ||||||
|  | 	// 按键消息程序
 | ||||||
|  | 	static void KeyboardProc( | ||||||
|  | 		UINT message, | ||||||
|  | 		WPARAM wParam, | ||||||
|  | 		LPARAM lParam | ||||||
|  | 	); | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | // 定时器管理器
 | ||||||
|  | class ETimerManager | ||||||
|  | { | ||||||
|  | 	friend EApp; | ||||||
|  | 	friend EScene; | ||||||
|  | 	friend ENode; | ||||||
|  | 
 | ||||||
|  | public: | ||||||
|  | 	// 绑定定时器到场景
 | ||||||
|  | 	static void bindTimer( | ||||||
|  | 		ETimer * timer, | ||||||
|  | 		EScene * pParentScene | ||||||
|  | 	); | ||||||
|  | 
 | ||||||
|  | 	// 绑定定时器到节点
 | ||||||
|  | 	static void bindTimer( | ||||||
|  | 		ETimer * timer, | ||||||
|  | 		ENode * pParentNode | ||||||
|  | 	); | ||||||
|  | 
 | ||||||
|  | 	// 启动具有相同名称的定时器
 | ||||||
|  | 	static void startTimers( | ||||||
|  | 		const EString &name | ||||||
|  | 	); | ||||||
|  | 
 | ||||||
|  | 	// 停止具有相同名称的定时器
 | ||||||
|  | 	static void stopTimers( | ||||||
|  | 		const EString &name | ||||||
|  | 	); | ||||||
|  | 
 | ||||||
|  | 	// 删除具有相同名称的定时器
 | ||||||
|  | 	static void delTimers( | ||||||
|  | 		const EString &name | ||||||
|  | 	); | ||||||
|  | 
 | ||||||
|  | 	// 启动绑定在场景及其子节点上的所有定时器
 | ||||||
|  | 	static void startAllTimersBindedWith( | ||||||
|  | 		EScene * pParentScene | ||||||
|  | 	); | ||||||
|  | 
 | ||||||
|  | 	// 停止绑定在场景及其子节点上的所有定时器
 | ||||||
|  | 	static void stopAllTimersBindedWith( | ||||||
|  | 		EScene * pParentScene | ||||||
|  | 	); | ||||||
|  | 
 | ||||||
|  | 	// 启动绑定在节点上的所有定时器
 | ||||||
|  | 	static void startAllTimersBindedWith( | ||||||
|  | 		ENode * pParentNode | ||||||
|  | 	); | ||||||
|  | 
 | ||||||
|  | 	// 停止绑定在节点上的所有定时器
 | ||||||
|  | 	static void stopAllTimersBindedWith( | ||||||
|  | 		ENode * pParentNode | ||||||
|  | 	); | ||||||
|  | 
 | ||||||
|  | 	// 启动所有定时器
 | ||||||
|  | 	static void startAllTimers(); | ||||||
|  | 
 | ||||||
|  | 	// 停止所有定时器
 | ||||||
|  | 	static void stopAllTimers(); | ||||||
|  | 
 | ||||||
|  | private: | ||||||
|  | 	// 清空定时器管理器
 | ||||||
|  | 	static void _clearManager(); | ||||||
|  | 
 | ||||||
|  | 	// 清空绑定在节点上的所有定时器
 | ||||||
|  | 	static void _clearAllTimersBindedWith( | ||||||
|  | 		ENode * pParentNode | ||||||
|  | 	); | ||||||
|  | 
 | ||||||
|  | 	// 重置定时器状态
 | ||||||
|  | 	static void _resetAllTimers(); | ||||||
|  | 
 | ||||||
|  | 	// 定时器执行程序
 | ||||||
|  | 	static void TimerProc(); | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | // 动作管理器
 | ||||||
|  | class EActionManager | ||||||
|  | { | ||||||
|  | 	friend EApp; | ||||||
|  | 	friend EScene; | ||||||
|  | 	friend ENode; | ||||||
|  | 
 | ||||||
|  | public: | ||||||
|  | 	// 添加动作
 | ||||||
|  | 	static void addAction( | ||||||
|  | 		EAction * action | ||||||
|  | 	); | ||||||
|  | 
 | ||||||
|  | 	// 继续绑定在节点上的所有动作
 | ||||||
|  | 	static void startAllActionsBindedWith( | ||||||
|  | 		ENode * pTargetNode | ||||||
|  | 	); | ||||||
|  | 
 | ||||||
|  | 	// 暂停绑定在节点上的所有动作
 | ||||||
|  | 	static void pauseAllActionsBindedWith( | ||||||
|  | 		ENode * pTargetNode | ||||||
|  | 	); | ||||||
|  | 
 | ||||||
|  | 	// 停止绑定在节点上的所有动作
 | ||||||
|  | 	static void stopAllActionsBindedWith( | ||||||
|  | 		ENode * pTargetNode | ||||||
|  | 	); | ||||||
|  | 
 | ||||||
|  | 	// 继续所有动作
 | ||||||
|  | 	static void startAllActions(); | ||||||
|  | 
 | ||||||
|  | 	// 暂停所有动作
 | ||||||
|  | 	static void pauseAllActions(); | ||||||
|  | 
 | ||||||
|  | 	// 停止所有动作
 | ||||||
|  | 	static void stopAllActions(); | ||||||
|  | 
 | ||||||
|  | private: | ||||||
|  | 	// 清空动画管理器
 | ||||||
|  | 	static void _clearManager(); | ||||||
|  | 
 | ||||||
|  | 	// 清空绑定在节点上的所有动作
 | ||||||
|  | 	static void _clearAllActionsBindedWith( | ||||||
|  | 		ENode * pTargetNode | ||||||
|  | 	); | ||||||
|  | 
 | ||||||
|  | 	// 重置所有动作状态
 | ||||||
|  | 	static void _resetAllActions(); | ||||||
|  | 
 | ||||||
|  | 	// 动作执行程序
 | ||||||
|  | 	static void ActionProc(); | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | class EPhysicsManager | ||||||
|  | { | ||||||
|  | public: | ||||||
|  | 	// 绑定形状到节点
 | ||||||
|  | 	static void bindWith( | ||||||
|  | 		EGeometry * geometry, | ||||||
|  | 		ENode * node | ||||||
|  | 	); | ||||||
|  | 
 | ||||||
|  | protected: | ||||||
|  | 	// 物理引擎执行程序
 | ||||||
|  | 	static void PhysicsProc(); | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | } | ||||||
							
								
								
									
										615
									
								
								Easy2D/emsg.h
								
								
								
								
							
							
						
						
									
										615
									
								
								Easy2D/emsg.h
								
								
								
								
							|  | @ -1,615 +0,0 @@ | ||||||
| #pragma once |  | ||||||
| #include "ebase.h" |  | ||||||
| 
 |  | ||||||
| namespace e2d |  | ||||||
| { |  | ||||||
| 
 |  | ||||||
| class ENode; |  | ||||||
| class EMsgManager; |  | ||||||
| 
 |  | ||||||
| // 鼠标消息
 |  | ||||||
| class EMouseMsg |  | ||||||
| { |  | ||||||
| 	friend EMsgManager; |  | ||||||
| 
 |  | ||||||
| public: |  | ||||||
| 	// 鼠标消息集合
 |  | ||||||
| 	enum MOUSE_MSG |  | ||||||
| 	{ |  | ||||||
| 		MOVE = 0x0200,	// 鼠标移动
 |  | ||||||
| 		LBUTTON_DOWN,	// 鼠标左键按下
 |  | ||||||
| 		LBUTTON_UP,		// 鼠标左键抬起
 |  | ||||||
| 		LBUTTON_DBLCLK,	// 鼠标左键双击
 |  | ||||||
| 		RBUTTON_DOWN,	// 鼠标右键按下
 |  | ||||||
| 		RBUTTON_UP,		// 鼠标右键抬起
 |  | ||||||
| 		RBUTTON_DBLCLK,	// 鼠标右键双击
 |  | ||||||
| 		MBUTTON_DOWN,	// 鼠标中键按下
 |  | ||||||
| 		MBUTTON_UP,		// 鼠标中键抬起
 |  | ||||||
| 		MBUTTON_DBLCLK,	// 鼠标中键双击
 |  | ||||||
| 		WHEEL			// 滑动滚轮
 |  | ||||||
| 	}; |  | ||||||
| 
 |  | ||||||
| 	// 获取鼠标横坐标
 |  | ||||||
| 	static DWORD getPosX(); |  | ||||||
| 
 |  | ||||||
| 	// 获取鼠标纵坐标
 |  | ||||||
| 	static DWORD getPosY(); |  | ||||||
| 
 |  | ||||||
| 	// 获取鼠标坐标
 |  | ||||||
| 	static EPoint getPos(); |  | ||||||
| 
 |  | ||||||
| 	// 获取鼠标左键按下状态
 |  | ||||||
| 	static bool isLButtonDown(); |  | ||||||
| 
 |  | ||||||
| 	// 获取鼠标中键按下状态
 |  | ||||||
| 	static bool isMButtonDown(); |  | ||||||
| 
 |  | ||||||
| 	// 获取鼠标右键按下状态
 |  | ||||||
| 	static bool isRButtonDown(); |  | ||||||
| 
 |  | ||||||
| 	// 获取 Shift 按键状态
 |  | ||||||
| 	static bool isShiftDown(); |  | ||||||
| 
 |  | ||||||
| 	// 获取 Ctrl 按键状态
 |  | ||||||
| 	static bool isCtrlDown(); |  | ||||||
| 
 |  | ||||||
| 	// 获取鼠标滚轮值
 |  | ||||||
| 	static DWORD getWheelDelta(); |  | ||||||
| 
 |  | ||||||
| 	// 获取当前鼠标消息
 |  | ||||||
| 	static MOUSE_MSG getMsg(); |  | ||||||
| 
 |  | ||||||
| protected: |  | ||||||
| 	UINT m_nMsg = 0; |  | ||||||
| 	WPARAM m_wParam = 0; |  | ||||||
| 	LPARAM m_lParam = 0; |  | ||||||
| }; |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| // 按键消息
 |  | ||||||
| class EKeyboardMsg |  | ||||||
| { |  | ||||||
| 	friend EMsgManager; |  | ||||||
| 
 |  | ||||||
| public: |  | ||||||
| 	// 按键消息类型集合
 |  | ||||||
| 	enum KEYBOARD_MSG |  | ||||||
| 	{ |  | ||||||
| 		KEY_DOWN = 0x0100,	// 按下
 |  | ||||||
| 		KEY_UP				// 抬起
 |  | ||||||
| 	}; |  | ||||||
| 
 |  | ||||||
| 	// 按键键值集合
 |  | ||||||
| 	enum class KEY |  | ||||||
| 	{ |  | ||||||
| 		A = 'A', B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V, W, X, Y, Z,					// 字母键值
 |  | ||||||
| 		NUM0 = '0', NUM1, NUM2, NUM3, NUM4, NUM5, NUM6, NUM7, NUM8, NUM9,									// 数字键值
 |  | ||||||
| 		NUMPAD0 = 0x60, NUMPAD1, NUMPAD2, NUMPAD3, NUMPAD4, NUMPAD5, NUMPAD6, NUMPAD7, NUMPAD8, NUMPAD9,	// 数字小键盘键值
 |  | ||||||
| 		F1 = 0x70, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12,											// F键键值
 |  | ||||||
| 		MULTIPLY,		// 乘号键键值
 |  | ||||||
| 		ADD,			// 加号键键值
 |  | ||||||
| 		SEPARATOR,		// 分割键键值
 |  | ||||||
| 		SUBTRACT,		// 减号键键值
 |  | ||||||
| 		DECIMAL,		// 小数点键键值
 |  | ||||||
| 		DIVIDE,			// 除号键键值
 |  | ||||||
| 		TAB = 0x09,		// TAB 键键值
 |  | ||||||
| 		ENTER = 0x0D,	// 回车键键值
 |  | ||||||
| 		SHIFT, CTRL, 	// SHIFT 键键值
 |  | ||||||
| 		ESC = 0x1B, 	// ESCAPE 键键值
 |  | ||||||
| 		SPACE = 0x20, 	// 空格键键值
 |  | ||||||
| 		PAGE_UP, 		// PageUp 键键值
 |  | ||||||
| 		PAGE_DOWN, 		// PageDown 键键值
 |  | ||||||
| 		END, 			// End 键键值
 |  | ||||||
| 		HOME, 			// Home 键键值
 |  | ||||||
| 		LEFT, 			// 左键键值
 |  | ||||||
| 		UP, 			// 上键键值
 |  | ||||||
| 		RIGHT, 			// 右键键值
 |  | ||||||
| 		DOWN			// 下键键值
 |  | ||||||
| 	}; |  | ||||||
| 
 |  | ||||||
| 	// 获取按键消息类型
 |  | ||||||
| 	static KEYBOARD_MSG getMsg(); |  | ||||||
| 
 |  | ||||||
| 	// 获取键值
 |  | ||||||
| 	static KEY getVal(); |  | ||||||
| 
 |  | ||||||
| 	// 获取按键消息的计数
 |  | ||||||
| 	static DWORD getCount(); |  | ||||||
| 
 |  | ||||||
| 	// 获取特定按键的状态
 |  | ||||||
| 	static bool isKeyDown( |  | ||||||
| 		KEY key |  | ||||||
| 	); |  | ||||||
| 
 |  | ||||||
| 	// 获取大小写锁定状态
 |  | ||||||
| 	static bool isCapitalLockOn(); |  | ||||||
| 
 |  | ||||||
| 	// 获取数字小键盘锁定状态
 |  | ||||||
| 	static bool isNumpadLockOn(); |  | ||||||
| 
 |  | ||||||
| 	// 获取滑动锁定状态
 |  | ||||||
| 	static bool isScrollLockOn(); |  | ||||||
| 
 |  | ||||||
| protected: |  | ||||||
| 	UINT m_nMsg = 0; |  | ||||||
| 	WPARAM m_wParam = 0; |  | ||||||
| 	LPARAM m_lParam = 0; |  | ||||||
| }; |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| // 监听器
 |  | ||||||
| class EListener : |  | ||||||
| 	public EObject |  | ||||||
| { |  | ||||||
| 	friend EMsgManager; |  | ||||||
| 
 |  | ||||||
| public: |  | ||||||
| 	EListener(); |  | ||||||
| 
 |  | ||||||
| 	EListener( |  | ||||||
| 		const EString &name |  | ||||||
| 	); |  | ||||||
| 
 |  | ||||||
| 	// 获取监听器状态
 |  | ||||||
| 	bool isRunning() const; |  | ||||||
| 
 |  | ||||||
| 	// 启动监听
 |  | ||||||
| 	void start(); |  | ||||||
| 
 |  | ||||||
| 	// 停止监听
 |  | ||||||
| 	void stop(); |  | ||||||
| 
 |  | ||||||
| 	// 获取监听器名称
 |  | ||||||
| 	EString getName() const; |  | ||||||
| 
 |  | ||||||
| 	// 获取监听器所在场景
 |  | ||||||
| 	EScene * getParentScene() const; |  | ||||||
| 
 |  | ||||||
| 	// 获取监听器所在节点
 |  | ||||||
| 	ENode * getParentNode() const; |  | ||||||
| 
 |  | ||||||
| 	// 设置监听器名称
 |  | ||||||
| 	void setName( |  | ||||||
| 		const EString &name |  | ||||||
| 	); |  | ||||||
| 
 |  | ||||||
| 	// 绑定监听器到场景
 |  | ||||||
| 	virtual void bindWith( |  | ||||||
| 		EScene * pParentScene |  | ||||||
| 	) = 0; |  | ||||||
| 
 |  | ||||||
| 	// 绑定监听器到节点
 |  | ||||||
| 	virtual void bindWith( |  | ||||||
| 		ENode * pParentNode |  | ||||||
| 	) = 0; |  | ||||||
| 
 |  | ||||||
| protected: |  | ||||||
| 	// 执行监听器回调函数
 |  | ||||||
| 	virtual void _callOn() = 0; |  | ||||||
| 
 |  | ||||||
| protected: |  | ||||||
| 	EString		m_sName; |  | ||||||
| 	bool		m_bRunning; |  | ||||||
| 	bool		m_bAlways; |  | ||||||
| 	EScene *	m_pParentScene; |  | ||||||
| 	ENode *		m_pParentNode; |  | ||||||
| }; |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| // 鼠标消息监听器
 |  | ||||||
| class EMouseListener : |  | ||||||
| 	public EListener |  | ||||||
| { |  | ||||||
| 	friend EMsgManager; |  | ||||||
| 
 |  | ||||||
| public: |  | ||||||
| 	EMouseListener(); |  | ||||||
| 
 |  | ||||||
| 	EMouseListener( |  | ||||||
| 		const EString &name |  | ||||||
| 	); |  | ||||||
| 
 |  | ||||||
| 	EMouseListener( |  | ||||||
| 		const MOUSE_LISTENER_CALLBACK &callback |  | ||||||
| 	); |  | ||||||
| 
 |  | ||||||
| 	EMouseListener( |  | ||||||
| 		const EString &name, |  | ||||||
| 		const MOUSE_LISTENER_CALLBACK &callback |  | ||||||
| 	); |  | ||||||
| 
 |  | ||||||
| 	// 设置监听器回调函数
 |  | ||||||
| 	void setCallback( |  | ||||||
| 		const MOUSE_LISTENER_CALLBACK &callback |  | ||||||
| 	); |  | ||||||
| 
 |  | ||||||
| 	// 绑定监听器到场景
 |  | ||||||
| 	virtual void bindWith( |  | ||||||
| 		EScene * pParentScene |  | ||||||
| 	) override; |  | ||||||
| 
 |  | ||||||
| 	// 绑定监听器到节点
 |  | ||||||
| 	virtual void bindWith( |  | ||||||
| 		ENode * pParentNode |  | ||||||
| 	) override; |  | ||||||
| 
 |  | ||||||
| protected: |  | ||||||
| 	// 执行监听器回调函数
 |  | ||||||
| 	virtual void _callOn() override; |  | ||||||
| 
 |  | ||||||
| protected: |  | ||||||
| 	MOUSE_LISTENER_CALLBACK m_Callback; |  | ||||||
| }; |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| // 鼠标按下消息监听器
 |  | ||||||
| class EMousePressListener : |  | ||||||
| 	public EMouseListener |  | ||||||
| { |  | ||||||
| public: |  | ||||||
| 	EMousePressListener(); |  | ||||||
| 
 |  | ||||||
| 	EMousePressListener( |  | ||||||
| 		const EString &name |  | ||||||
| 	); |  | ||||||
| 
 |  | ||||||
| 	EMousePressListener( |  | ||||||
| 		const MOUSE_PRESS_LISTENER_CALLBACK &callback |  | ||||||
| 	); |  | ||||||
| 
 |  | ||||||
| 	EMousePressListener( |  | ||||||
| 		const EString &name, |  | ||||||
| 		const MOUSE_PRESS_LISTENER_CALLBACK &callback |  | ||||||
| 	); |  | ||||||
| 
 |  | ||||||
| 	// 设置监听器回调函数
 |  | ||||||
| 	void setCallback( |  | ||||||
| 		const MOUSE_PRESS_LISTENER_CALLBACK &callback |  | ||||||
| 	); |  | ||||||
| 
 |  | ||||||
| protected: |  | ||||||
| 	// 执行监听器回调函数
 |  | ||||||
| 	virtual void _callOn() override; |  | ||||||
| 
 |  | ||||||
| protected: |  | ||||||
| 	MOUSE_PRESS_LISTENER_CALLBACK m_Callback; |  | ||||||
| }; |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| // 鼠标点击消息监听器
 |  | ||||||
| class EMouseClickListener : |  | ||||||
| 	public EMouseListener |  | ||||||
| { |  | ||||||
| public: |  | ||||||
| 	EMouseClickListener(); |  | ||||||
| 
 |  | ||||||
| 	EMouseClickListener( |  | ||||||
| 		const EString &name |  | ||||||
| 	); |  | ||||||
| 
 |  | ||||||
| 	EMouseClickListener( |  | ||||||
| 		const MOUSE_CLICK_LISTENER_CALLBACK &callback |  | ||||||
| 	); |  | ||||||
| 
 |  | ||||||
| 	EMouseClickListener( |  | ||||||
| 		const EString &name, |  | ||||||
| 		const MOUSE_CLICK_LISTENER_CALLBACK &callback |  | ||||||
| 	); |  | ||||||
| 
 |  | ||||||
| 	// 设置监听器回调函数
 |  | ||||||
| 	void setCallback( |  | ||||||
| 		const MOUSE_CLICK_LISTENER_CALLBACK &callback |  | ||||||
| 	); |  | ||||||
| 
 |  | ||||||
| protected: |  | ||||||
| 	// 执行监听器回调函数
 |  | ||||||
| 	virtual void _callOn() override; |  | ||||||
| 
 |  | ||||||
| protected: |  | ||||||
| 	bool m_bPressed; |  | ||||||
| 	MOUSE_CLICK_LISTENER_CALLBACK m_Callback; |  | ||||||
| }; |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| // 鼠标点击消息监听器
 |  | ||||||
| class EMouseDoubleClickListener : |  | ||||||
| 	public EMouseListener |  | ||||||
| { |  | ||||||
| public: |  | ||||||
| 	EMouseDoubleClickListener(); |  | ||||||
| 
 |  | ||||||
| 	EMouseDoubleClickListener( |  | ||||||
| 		const EString &name |  | ||||||
| 	); |  | ||||||
| 
 |  | ||||||
| 	EMouseDoubleClickListener( |  | ||||||
| 		const MOUSE_DBLCLK_LISTENER_CALLBACK &callback |  | ||||||
| 	); |  | ||||||
| 
 |  | ||||||
| 	EMouseDoubleClickListener( |  | ||||||
| 		const EString &name, |  | ||||||
| 		const MOUSE_DBLCLK_LISTENER_CALLBACK &callback |  | ||||||
| 	); |  | ||||||
| 
 |  | ||||||
| 	// 设置监听器回调函数
 |  | ||||||
| 	void setCallback( |  | ||||||
| 		const MOUSE_DBLCLK_LISTENER_CALLBACK &callback |  | ||||||
| 	); |  | ||||||
| 
 |  | ||||||
| protected: |  | ||||||
| 	// 执行监听器回调函数
 |  | ||||||
| 	virtual void _callOn() override; |  | ||||||
| 
 |  | ||||||
| protected: |  | ||||||
| 	bool m_bPressed; |  | ||||||
| 	MOUSE_DBLCLK_LISTENER_CALLBACK m_Callback; |  | ||||||
| }; |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| // 鼠标拖动消息监听器
 |  | ||||||
| class EMouseDragListener : |  | ||||||
| 	public EMouseListener |  | ||||||
| { |  | ||||||
| public: |  | ||||||
| 	EMouseDragListener(); |  | ||||||
| 
 |  | ||||||
| 	EMouseDragListener( |  | ||||||
| 		const EString &name |  | ||||||
| 	); |  | ||||||
| 
 |  | ||||||
| 	EMouseDragListener( |  | ||||||
| 		const MOUSE_DRAG_LISTENER_CALLBACK &callback |  | ||||||
| 	); |  | ||||||
| 
 |  | ||||||
| 	EMouseDragListener( |  | ||||||
| 		const EString &name, |  | ||||||
| 		const MOUSE_DRAG_LISTENER_CALLBACK &callback |  | ||||||
| 	); |  | ||||||
| 
 |  | ||||||
| 	// 设置监听器回调函数
 |  | ||||||
| 	void setCallback( |  | ||||||
| 		const MOUSE_DRAG_LISTENER_CALLBACK &callback |  | ||||||
| 	); |  | ||||||
| 
 |  | ||||||
| protected: |  | ||||||
| 	// 执行监听器回调函数
 |  | ||||||
| 	virtual void _callOn() override; |  | ||||||
| 
 |  | ||||||
| protected: |  | ||||||
| 	EPoint	m_Begin; |  | ||||||
| 	MOUSE_DRAG_LISTENER_CALLBACK m_Callback; |  | ||||||
| }; |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| // 按键消息监听器
 |  | ||||||
| class EKeyboardListener : |  | ||||||
| 	public EListener |  | ||||||
| { |  | ||||||
| 	friend EMsgManager; |  | ||||||
| 
 |  | ||||||
| public: |  | ||||||
| 	EKeyboardListener(); |  | ||||||
| 
 |  | ||||||
| 	EKeyboardListener( |  | ||||||
| 		const EString &name |  | ||||||
| 	); |  | ||||||
| 
 |  | ||||||
| 	EKeyboardListener( |  | ||||||
| 		const KEY_LISTENER_CALLBACK &callback |  | ||||||
| 	); |  | ||||||
| 
 |  | ||||||
| 	EKeyboardListener( |  | ||||||
| 		const EString &name, |  | ||||||
| 		const KEY_LISTENER_CALLBACK &callback |  | ||||||
| 	); |  | ||||||
| 
 |  | ||||||
| 	// 设置监听器回调函数
 |  | ||||||
| 	void setCallback( |  | ||||||
| 		const KEY_LISTENER_CALLBACK &callback |  | ||||||
| 	); |  | ||||||
| 
 |  | ||||||
| 	// 绑定监听器到场景
 |  | ||||||
| 	virtual void bindWith( |  | ||||||
| 		EScene * pParentScene |  | ||||||
| 	) override; |  | ||||||
| 
 |  | ||||||
| 	// 绑定监听器到节点
 |  | ||||||
| 	virtual void bindWith( |  | ||||||
| 		ENode * pParentNode |  | ||||||
| 	) override; |  | ||||||
| 
 |  | ||||||
| protected: |  | ||||||
| 	// 执行监听器回调函数
 |  | ||||||
| 	virtual void _callOn() override; |  | ||||||
| 
 |  | ||||||
| protected: |  | ||||||
| 	KEY_LISTENER_CALLBACK m_Callback; |  | ||||||
| }; |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| // 按键按下消息监听
 |  | ||||||
| class EKeyboardPressListener : |  | ||||||
| 	public EKeyboardListener |  | ||||||
| { |  | ||||||
| 	friend EMsgManager; |  | ||||||
| 
 |  | ||||||
| public: |  | ||||||
| 	EKeyboardPressListener(); |  | ||||||
| 
 |  | ||||||
| 	EKeyboardPressListener( |  | ||||||
| 		const EString &name |  | ||||||
| 	); |  | ||||||
| 
 |  | ||||||
| 	EKeyboardPressListener( |  | ||||||
| 		const KEY_LISTENER_CALLBACK &callback |  | ||||||
| 	); |  | ||||||
| 
 |  | ||||||
| 	EKeyboardPressListener( |  | ||||||
| 		const EString &name, |  | ||||||
| 		const KEY_LISTENER_CALLBACK &callback |  | ||||||
| 	); |  | ||||||
| 
 |  | ||||||
| protected: |  | ||||||
| 	// 执行监听器回调函数
 |  | ||||||
| 	virtual void _callOn() override; |  | ||||||
| }; |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| // 消息管理器
 |  | ||||||
| class EMsgManager |  | ||||||
| { |  | ||||||
| 	friend EApp; |  | ||||||
| 	friend EScene; |  | ||||||
| 	friend ENode; |  | ||||||
| 
 |  | ||||||
| public: |  | ||||||
| 	// 绑定鼠标消息监听器到场景
 |  | ||||||
| 	static void bindListener( |  | ||||||
| 		EMouseListener * listener, |  | ||||||
| 		EScene * pParentScene, |  | ||||||
| 		bool always = false /* 是否在游戏暂停时仍然监听 */ |  | ||||||
| 	); |  | ||||||
| 
 |  | ||||||
| 	// 绑定鼠标消息监听器到节点
 |  | ||||||
| 	static void bindListener( |  | ||||||
| 		EMouseListener * listener, |  | ||||||
| 		ENode * pParentNode, |  | ||||||
| 		bool always = false /* 是否在游戏暂停时仍然监听 */ |  | ||||||
| 	); |  | ||||||
| 
 |  | ||||||
| 	// 启动具有相同名称的鼠标消息监听器
 |  | ||||||
| 	static void startMouseListeners( |  | ||||||
| 		const EString &name |  | ||||||
| 	); |  | ||||||
| 
 |  | ||||||
| 	// 停止具有相同名称的鼠标消息监听器
 |  | ||||||
| 	static void stopMouseListeners( |  | ||||||
| 		const EString &name |  | ||||||
| 	); |  | ||||||
| 
 |  | ||||||
| 	// 删除具有相同名称的鼠标消息监听器
 |  | ||||||
| 	static void delMouseListeners( |  | ||||||
| 		const EString &name |  | ||||||
| 	); |  | ||||||
| 
 |  | ||||||
| 	// 启动绑定在场景及其子节点上的所有鼠标消息监听器
 |  | ||||||
| 	static void startAllMouseListenersBindedWith( |  | ||||||
| 		EScene * pParentScene |  | ||||||
| 	); |  | ||||||
| 
 |  | ||||||
| 	// 停止绑定在场景及其子节点上的所有鼠标消息监听器
 |  | ||||||
| 	static void stopAllMouseListenersBindedWith( |  | ||||||
| 		EScene * pParentScene |  | ||||||
| 	); |  | ||||||
| 
 |  | ||||||
| 	// 启动绑定在节点上的所有鼠标消息监听器
 |  | ||||||
| 	static void startAllMouseListenersBindedWith( |  | ||||||
| 		ENode * pParentNode |  | ||||||
| 	); |  | ||||||
| 
 |  | ||||||
| 	// 停止绑定在节点上的所有鼠标消息监听器
 |  | ||||||
| 	static void stopAllMouseListenersBindedWith( |  | ||||||
| 		ENode * pParentNode |  | ||||||
| 	); |  | ||||||
| 
 |  | ||||||
| 	// 启动所有鼠标消息监听器
 |  | ||||||
| 	static void startAllMouseListeners(); |  | ||||||
| 
 |  | ||||||
| 	// 停止所有鼠标消息监听器
 |  | ||||||
| 	static void stopAllMouseListeners(); |  | ||||||
| 
 |  | ||||||
| 	// 绑定按键消息监听器到场景
 |  | ||||||
| 	static void bindListener( |  | ||||||
| 		EKeyboardListener * listener, |  | ||||||
| 		EScene * pParentScene, |  | ||||||
| 		bool always = false /* 是否在游戏暂停时仍然监听 */ |  | ||||||
| 	); |  | ||||||
| 
 |  | ||||||
| 	// 绑定按键消息监听器到节点
 |  | ||||||
| 	static void bindListener( |  | ||||||
| 		EKeyboardListener * listener, |  | ||||||
| 		ENode * pParentNode, |  | ||||||
| 		bool always = false /* 是否在游戏暂停时仍然监听 */ |  | ||||||
| 	); |  | ||||||
| 
 |  | ||||||
| 	// 启动名称相同的按键消息监听器
 |  | ||||||
| 	static void startKeyboardListeners( |  | ||||||
| 		const EString &name |  | ||||||
| 	); |  | ||||||
| 
 |  | ||||||
| 	// 停止名称相同的按键消息监听器
 |  | ||||||
| 	static void stopKeyboardListeners( |  | ||||||
| 		const EString &name |  | ||||||
| 	); |  | ||||||
| 
 |  | ||||||
| 	// 删除名称相同的按键消息监听器
 |  | ||||||
| 	static void delKeyboardListeners( |  | ||||||
| 		const EString &name |  | ||||||
| 	); |  | ||||||
| 
 |  | ||||||
| 	// 启动绑定在场景及其子节点上的所有按键消息监听器
 |  | ||||||
| 	static void startAllKeyboardListenersBindedWith( |  | ||||||
| 		EScene * pParentScene |  | ||||||
| 	); |  | ||||||
| 
 |  | ||||||
| 	// 停止绑定在场景及其子节点上的所有按键消息监听器
 |  | ||||||
| 	static void stopAllKeyboardListenersBindedWith( |  | ||||||
| 		EScene * pParentScene |  | ||||||
| 	); |  | ||||||
| 
 |  | ||||||
| 	// 启动绑定在节点上的所有按键消息监听器
 |  | ||||||
| 	static void startAllKeyboardListenersBindedWith( |  | ||||||
| 		ENode * pParentNode |  | ||||||
| 	); |  | ||||||
| 
 |  | ||||||
| 	// 停止绑定在节点上的所有按键消息监听器
 |  | ||||||
| 	static void stopAllKeyboardListenersBindedWith( |  | ||||||
| 		ENode * pParentNode |  | ||||||
| 	); |  | ||||||
| 
 |  | ||||||
| 	// 启动所有按键消息监听器
 |  | ||||||
| 	static void startAllKeyboardListeners(); |  | ||||||
| 
 |  | ||||||
| 	// 停止所有按键消息监听器
 |  | ||||||
| 	static void stopAllKeyboardListeners(); |  | ||||||
| 
 |  | ||||||
| private: |  | ||||||
| 	// 清除所有监听器
 |  | ||||||
| 	static void _clearManager(); |  | ||||||
| 
 |  | ||||||
| 	// 清除绑定在节点上的所有鼠标消息监听器
 |  | ||||||
| 	static void _clearAllMouseListenersBindedWith( |  | ||||||
| 		ENode * pParentNode |  | ||||||
| 	); |  | ||||||
| 
 |  | ||||||
| 	// 清除绑定在场景及其子节点上的所有按键消息监听器
 |  | ||||||
| 	static void _clearAllKeyboardListenersBindedWith( |  | ||||||
| 		EScene * pParentScene |  | ||||||
| 	); |  | ||||||
| 
 |  | ||||||
| 	// 清除绑定在场景及其子节点上的所有鼠标消息监听器
 |  | ||||||
| 	static void _clearAllMouseListenersBindedWith( |  | ||||||
| 		EScene * pParentScene |  | ||||||
| 	); |  | ||||||
| 
 |  | ||||||
| 	// 清除绑定在节点上的所有按键消息监听器
 |  | ||||||
| 	static void _clearAllKeyboardListenersBindedWith( |  | ||||||
| 		ENode * pParentNode |  | ||||||
| 	); |  | ||||||
| 
 |  | ||||||
| 	// 鼠标消息程序
 |  | ||||||
| 	static void MouseProc( |  | ||||||
| 		UINT message, |  | ||||||
| 		WPARAM wParam, |  | ||||||
| 		LPARAM lParam |  | ||||||
| 	); |  | ||||||
| 
 |  | ||||||
| 	// 按键消息程序
 |  | ||||||
| 	static void KeyboardProc( |  | ||||||
| 		UINT message, |  | ||||||
| 		WPARAM wParam, |  | ||||||
| 		LPARAM lParam |  | ||||||
| 	); |  | ||||||
| }; |  | ||||||
| 
 |  | ||||||
| } |  | ||||||
|  | @ -8,6 +8,7 @@ class EText; | ||||||
| class ESprite; | class ESprite; | ||||||
| class EAction; | class EAction; | ||||||
| class EButton; | class EButton; | ||||||
|  | class EGeometry; | ||||||
| 
 | 
 | ||||||
| class ENode : | class ENode : | ||||||
| 	public EObject | 	public EObject | ||||||
|  | @ -63,6 +64,12 @@ public: | ||||||
| 	// 获取节点大小(不考虑缩放)
 | 	// 获取节点大小(不考虑缩放)
 | ||||||
| 	virtual ESize getRealSize() const; | 	virtual ESize getRealSize() const; | ||||||
| 
 | 
 | ||||||
|  | 	// 获取节点的锚点
 | ||||||
|  | 	virtual float getAnchorX() const; | ||||||
|  | 
 | ||||||
|  | 	// 获取节点的锚点
 | ||||||
|  | 	virtual float getAnchorY() const; | ||||||
|  | 
 | ||||||
| 	// 获取节点大小
 | 	// 获取节点大小
 | ||||||
| 	virtual ESize getSize() const; | 	virtual ESize getSize() const; | ||||||
| 
 | 
 | ||||||
|  | @ -224,6 +231,11 @@ public: | ||||||
| 		float anchorY | 		float anchorY | ||||||
| 	); | 	); | ||||||
| 
 | 
 | ||||||
|  | 	// 设置节点形状
 | ||||||
|  | 	virtual void setGeometry( | ||||||
|  | 		EGeometry * geometry | ||||||
|  | 	); | ||||||
|  | 
 | ||||||
| 	// 添加子节点
 | 	// 添加子节点
 | ||||||
| 	virtual void addChild( | 	virtual void addChild( | ||||||
| 		ENode * child, | 		ENode * child, | ||||||
|  | @ -362,6 +374,7 @@ protected: | ||||||
| 	bool		m_bDisplayedInScene; | 	bool		m_bDisplayedInScene; | ||||||
| 	bool		m_bSortChildrenNeeded; | 	bool		m_bSortChildrenNeeded; | ||||||
| 	bool		m_bTransformChildrenNeeded; | 	bool		m_bTransformChildrenNeeded; | ||||||
|  | 	EGeometry * m_pGeometry; | ||||||
| 	EScene *	m_pParentScene; | 	EScene *	m_pParentScene; | ||||||
| 	ENode *		m_pParent; | 	ENode *		m_pParent; | ||||||
| 	D2D1::Matrix3x2F	m_Matri; | 	D2D1::Matrix3x2F	m_Matri; | ||||||
|  | @ -569,12 +582,23 @@ public: | ||||||
| 
 | 
 | ||||||
| 	virtual ~ESprite(); | 	virtual ~ESprite(); | ||||||
| 	 | 	 | ||||||
| 	// 设置精灵纹理
 | 	// 加载精灵纹理
 | ||||||
| 	void loadFrom( | 	void loadFrom( | ||||||
| 		ETexture * texture | 		ETexture * texture | ||||||
| 	); | 	); | ||||||
| 
 | 
 | ||||||
| 	// 设置精灵纹理并裁剪
 | 	// 从本地文件加载纹理
 | ||||||
|  | 	void loadFrom( | ||||||
|  | 		const EString & imageFileName | ||||||
|  | 	); | ||||||
|  | 
 | ||||||
|  | 	// 从资源加载纹理
 | ||||||
|  | 	void loadFrom( | ||||||
|  | 		const EString & resourceName, | ||||||
|  | 		const EString & resourceType | ||||||
|  | 	); | ||||||
|  | 
 | ||||||
|  | 	// 加载纹理并裁剪
 | ||||||
| 	void loadFrom( | 	void loadFrom( | ||||||
| 		ETexture * texture, | 		ETexture * texture, | ||||||
| 		float x, | 		float x, | ||||||
|  | @ -618,7 +642,8 @@ public: | ||||||
| 	EFont( | 	EFont( | ||||||
| 		EString fontFamily, | 		EString fontFamily, | ||||||
| 		float fontSize = 22, | 		float fontSize = 22, | ||||||
| 		EFontWeight fontWeight = EFontWeight::REGULAR, | 		UINT32 color = EColor::WHITE, | ||||||
|  | 		UINT32 fontWeight = EFontWeight::REGULAR, | ||||||
| 		bool italic = false | 		bool italic = false | ||||||
| 	); | 	); | ||||||
| 
 | 
 | ||||||
|  | @ -628,7 +653,10 @@ public: | ||||||
| 	float getFontSize() const; | 	float getFontSize() const; | ||||||
| 
 | 
 | ||||||
| 	// 获取当前字体粗细值
 | 	// 获取当前字体粗细值
 | ||||||
| 	EFontWeight getFontWeight() const; | 	UINT32 getFontWeight() const; | ||||||
|  | 
 | ||||||
|  | 	// 获取文字颜色
 | ||||||
|  | 	UINT32 getColor() const; | ||||||
| 
 | 
 | ||||||
| 	// 是否是斜体
 | 	// 是否是斜体
 | ||||||
| 	bool isItalic() const; | 	bool isItalic() const; | ||||||
|  | @ -645,7 +673,12 @@ public: | ||||||
| 
 | 
 | ||||||
| 	// 设置字体粗细值
 | 	// 设置字体粗细值
 | ||||||
| 	void setWeight( | 	void setWeight( | ||||||
| 		EFontWeight fontWeight | 		UINT32 fontWeight | ||||||
|  | 	); | ||||||
|  | 
 | ||||||
|  | 	// 设置文字颜色
 | ||||||
|  | 	void setColor( | ||||||
|  | 		UINT32 color | ||||||
| 	); | 	); | ||||||
| 
 | 
 | ||||||
| 	// 设置文字斜体
 | 	// 设置文字斜体
 | ||||||
|  | @ -663,7 +696,8 @@ protected: | ||||||
| protected: | protected: | ||||||
| 	EString		m_sFontFamily; | 	EString		m_sFontFamily; | ||||||
| 	float		m_fFontSize; | 	float		m_fFontSize; | ||||||
| 	EFontWeight	m_FontWeight; | 	UINT32		m_FontWeight; | ||||||
|  | 	UINT32		m_Color; | ||||||
| 	bool		m_bItalic; | 	bool		m_bItalic; | ||||||
| 	bool		m_bRecreateNeeded; | 	bool		m_bRecreateNeeded; | ||||||
| 	IDWriteTextFormat * m_pTextFormat; | 	IDWriteTextFormat * m_pTextFormat; | ||||||
|  | @ -686,16 +720,15 @@ public: | ||||||
| 
 | 
 | ||||||
| 	EText( | 	EText( | ||||||
| 		const EString & text, | 		const EString & text, | ||||||
| 		EColor color, |  | ||||||
| 		EFont * font | 		EFont * font | ||||||
| 	); | 	); | ||||||
| 
 | 
 | ||||||
| 	EText( | 	EText( | ||||||
| 		const EString & text, | 		const EString & text, | ||||||
| 		EColor color, |  | ||||||
| 		EString fontFamily, | 		EString fontFamily, | ||||||
| 		float fontSize = 22, | 		float fontSize = 22, | ||||||
| 		EFontWeight fontWeight = EFontWeight::REGULAR, | 		UINT32 color = EColor::WHITE, | ||||||
|  | 		UINT32 fontWeight = EFontWeight::REGULAR, | ||||||
| 		bool italic = false | 		bool italic = false | ||||||
| 	); | 	); | ||||||
| 
 | 
 | ||||||
|  | @ -710,9 +743,6 @@ public: | ||||||
| 	// 获取文本宽度(不考虑缩放)
 | 	// 获取文本宽度(不考虑缩放)
 | ||||||
| 	virtual float getRealWidth() const override; | 	virtual float getRealWidth() const override; | ||||||
| 
 | 
 | ||||||
| 	// 获取文字颜色
 |  | ||||||
| 	EColor getColor() const; |  | ||||||
| 
 |  | ||||||
| 	// 获取字体
 | 	// 获取字体
 | ||||||
| 	EFont * getFont() const; | 	EFont * getFont() const; | ||||||
| 
 | 
 | ||||||
|  | @ -721,11 +751,6 @@ public: | ||||||
| 		const EString & text | 		const EString & text | ||||||
| 	); | 	); | ||||||
| 
 | 
 | ||||||
| 	// 设置文字颜色
 |  | ||||||
| 	void setColor( |  | ||||||
| 		EColor color |  | ||||||
| 	); |  | ||||||
| 
 |  | ||||||
| 	// 设置字体
 | 	// 设置字体
 | ||||||
| 	void setFont( | 	void setFont( | ||||||
| 		EFont * font | 		EFont * font | ||||||
|  | @ -750,7 +775,6 @@ protected: | ||||||
| 
 | 
 | ||||||
| protected: | protected: | ||||||
| 	EString	m_sText; | 	EString	m_sText; | ||||||
| 	EColor	m_Color; |  | ||||||
| 	bool	m_bWordWrapping; | 	bool	m_bWordWrapping; | ||||||
| 	float	m_fWordWrappingWidth; | 	float	m_fWordWrappingWidth; | ||||||
| 	EFont * m_pFont; | 	EFont * m_pFont; | ||||||
|  |  | ||||||
							
								
								
									
										160
									
								
								Easy2D/etools.h
								
								
								
								
							
							
						
						
									
										160
									
								
								Easy2D/etools.h
								
								
								
								
							|  | @ -9,25 +9,6 @@ namespace e2d | ||||||
| class ETimerManager; | class ETimerManager; | ||||||
| class EAction; | class EAction; | ||||||
| 
 | 
 | ||||||
| // 对象管理器
 |  | ||||||
| class EObjectManager |  | ||||||
| { |  | ||||||
| 	friend EApp; |  | ||||||
| 
 |  | ||||||
| public: |  | ||||||
| 	// 将一个节点放入内存池
 |  | ||||||
| 	static void add( |  | ||||||
| 		e2d::EObject * nptr |  | ||||||
| 	); |  | ||||||
| 
 |  | ||||||
| 	// 通知内存池刷新
 |  | ||||||
| 	static void notifyFlush(); |  | ||||||
| 
 |  | ||||||
| private: |  | ||||||
| 	// 刷新内存池
 |  | ||||||
| 	static void __flush(); |  | ||||||
| }; |  | ||||||
| 
 |  | ||||||
| 
 | 
 | ||||||
| // 定时器
 | // 定时器
 | ||||||
| class ETimer : | class ETimer : | ||||||
|  | @ -65,9 +46,6 @@ public: | ||||||
| 	// 获取定时器名称
 | 	// 获取定时器名称
 | ||||||
| 	EString getName() const; | 	EString getName() const; | ||||||
| 
 | 
 | ||||||
| 	// 获取定时器所在场景
 |  | ||||||
| 	EScene * getParentScene() const; |  | ||||||
| 
 |  | ||||||
| 	// 获取定时器所在节点
 | 	// 获取定时器所在节点
 | ||||||
| 	ENode * getParentNode() const; | 	ENode * getParentNode() const; | ||||||
| 
 | 
 | ||||||
|  | @ -114,7 +92,6 @@ protected: | ||||||
| 	bool			m_bAtOnce; | 	bool			m_bAtOnce; | ||||||
| 	int				m_nRunTimes; | 	int				m_nRunTimes; | ||||||
| 	int				m_nRepeatTimes; | 	int				m_nRepeatTimes; | ||||||
| 	EScene *		m_pParentScene; |  | ||||||
| 	ENode *			m_pParentNode; | 	ENode *			m_pParentNode; | ||||||
| 	TIMER_CALLBACK	m_Callback; | 	TIMER_CALLBACK	m_Callback; | ||||||
| 	LONGLONG		m_nInterval; | 	LONGLONG		m_nInterval; | ||||||
|  | @ -122,143 +99,6 @@ protected: | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| // 定时器管理器
 |  | ||||||
| class ETimerManager |  | ||||||
| { |  | ||||||
| 	friend EApp; |  | ||||||
| 	friend EScene; |  | ||||||
| 	friend ENode; |  | ||||||
| 
 |  | ||||||
| public: |  | ||||||
| 	// 绑定定时器到场景
 |  | ||||||
| 	static void bindTimer( |  | ||||||
| 		ETimer * timer, |  | ||||||
| 		EScene * pParentScene |  | ||||||
| 	); |  | ||||||
| 
 |  | ||||||
| 	// 绑定定时器到节点
 |  | ||||||
| 	static void bindTimer( |  | ||||||
| 		ETimer * timer, |  | ||||||
| 		ENode * pParentNode |  | ||||||
| 	); |  | ||||||
| 
 |  | ||||||
| 	// 启动具有相同名称的定时器
 |  | ||||||
| 	static void startTimers( |  | ||||||
| 		const EString &name |  | ||||||
| 	); |  | ||||||
| 
 |  | ||||||
| 	// 停止具有相同名称的定时器
 |  | ||||||
| 	static void stopTimers( |  | ||||||
| 		const EString &name |  | ||||||
| 	); |  | ||||||
| 
 |  | ||||||
| 	// 删除具有相同名称的定时器
 |  | ||||||
| 	static void delTimers( |  | ||||||
| 		const EString &name |  | ||||||
| 	); |  | ||||||
| 
 |  | ||||||
| 	// 启动绑定在场景及其子节点上的所有定时器
 |  | ||||||
| 	static void startAllTimersBindedWith( |  | ||||||
| 		EScene * pParentScene |  | ||||||
| 	); |  | ||||||
| 
 |  | ||||||
| 	// 停止绑定在场景及其子节点上的所有定时器
 |  | ||||||
| 	static void stopAllTimersBindedWith( |  | ||||||
| 		EScene * pParentScene |  | ||||||
| 	); |  | ||||||
| 
 |  | ||||||
| 	// 启动绑定在节点上的所有定时器
 |  | ||||||
| 	static void startAllTimersBindedWith( |  | ||||||
| 		ENode * pParentNode |  | ||||||
| 	); |  | ||||||
| 
 |  | ||||||
| 	// 停止绑定在节点上的所有定时器
 |  | ||||||
| 	static void stopAllTimersBindedWith( |  | ||||||
| 		ENode * pParentNode |  | ||||||
| 	); |  | ||||||
| 
 |  | ||||||
| 	// 启动所有定时器
 |  | ||||||
| 	static void startAllTimers(); |  | ||||||
| 
 |  | ||||||
| 	// 停止所有定时器
 |  | ||||||
| 	static void stopAllTimers(); |  | ||||||
| 
 |  | ||||||
| private: |  | ||||||
| 	// 清空定时器管理器
 |  | ||||||
| 	static void _clearManager(); |  | ||||||
| 
 |  | ||||||
| 	// 清空绑定在场景及其子节点上的所有定时器
 |  | ||||||
| 	static void _clearAllTimersBindedWith( |  | ||||||
| 		EScene * pParentScene |  | ||||||
| 	); |  | ||||||
| 
 |  | ||||||
| 	// 清空绑定在节点上的所有定时器
 |  | ||||||
| 	static void _clearAllTimersBindedWith( |  | ||||||
| 		ENode * pParentNode |  | ||||||
| 	); |  | ||||||
| 
 |  | ||||||
| 	// 重置定时器状态
 |  | ||||||
| 	static void _resetAllTimers(); |  | ||||||
| 
 |  | ||||||
| 	// 定时器执行程序
 |  | ||||||
| 	static void TimerProc(); |  | ||||||
| }; |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| // 动作管理器
 |  | ||||||
| class EActionManager |  | ||||||
| { |  | ||||||
| 	friend EApp; |  | ||||||
| 	friend EScene; |  | ||||||
| 	friend ENode; |  | ||||||
| 
 |  | ||||||
| public: |  | ||||||
| 	// 添加动作
 |  | ||||||
| 	static void addAction( |  | ||||||
| 		EAction * action |  | ||||||
| 	); |  | ||||||
| 
 |  | ||||||
| 	// 继续绑定在节点上的所有动作
 |  | ||||||
| 	static void startAllActionsBindedWith( |  | ||||||
| 		ENode * pTargetNode |  | ||||||
| 	); |  | ||||||
| 
 |  | ||||||
| 	// 暂停绑定在节点上的所有动作
 |  | ||||||
| 	static void pauseAllActionsBindedWith( |  | ||||||
| 		ENode * pTargetNode |  | ||||||
| 	); |  | ||||||
| 
 |  | ||||||
| 	// 停止绑定在节点上的所有动作
 |  | ||||||
| 	static void stopAllActionsBindedWith( |  | ||||||
| 		ENode * pTargetNode |  | ||||||
| 	); |  | ||||||
| 
 |  | ||||||
| 	// 继续所有动作
 |  | ||||||
| 	static void startAllActions(); |  | ||||||
| 
 |  | ||||||
| 	// 暂停所有动作
 |  | ||||||
| 	static void pauseAllActions(); |  | ||||||
| 
 |  | ||||||
| 	// 停止所有动作
 |  | ||||||
| 	static void stopAllActions(); |  | ||||||
| 
 |  | ||||||
| private: |  | ||||||
| 	// 清空动画管理器
 |  | ||||||
| 	static void _clearManager(); |  | ||||||
| 
 |  | ||||||
| 	// 清空绑定在节点上的所有动作
 |  | ||||||
| 	static void _clearAllActionsBindedWith( |  | ||||||
| 		ENode * pTargetNode |  | ||||||
| 	); |  | ||||||
| 
 |  | ||||||
| 	// 重置所有动作状态
 |  | ||||||
| 	static void _resetAllActions(); |  | ||||||
| 
 |  | ||||||
| 	// 动作执行程序
 |  | ||||||
| 	static void ActionProc(); |  | ||||||
| }; |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| class EFileUtils | class EFileUtils | ||||||
| { | { | ||||||
| public: | public: | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue